2016-07-11 4 views
0

В базовой программе java я определил два метода класса, которые должны возвращать максимальное и минимальное числа из набора из четырех двухместных. Параметр значения берется из цикла for, а затем сравнивается с параметром стояния min или max. Однако результаты не правильны, и я не могу понять, почему; Я знаю, что где-то я сделал логическую ошибку.Как найти максимальный или минимальный двойной набор?

Два methods-

//calculate the minimum 
public double calcMin(double value, double min) 
{ 
    if (min < value) 
    { 
     min = value; 
    } 
    return value; 
} 

//calculate the maximum 
public double calcMax(double value, double max) 
{ 
    if (max < value) 
    { 
     max = value; 
    } 
    return max; 
} 

для петель

for (int i = 0; i < fillups.length; i ++) 
    { 
     distance[i] = fillups[i].calcDistance(); 
     milesPerGallon[i] = fillups[i].calcMPG(distance[i]); 
     cost[i] = fillups[i].calcTotalCost(); 
     minimum = fillups[i].calcMin(distance[i], minimum); 
     maximum = fillups[i].calcMax(distance[i], maximum); 
     minMPG = fillups[i].calcMin(milesPerGallon[i], minMPG); 
     maxMPG = fillups[i].calcMax(milesPerGallon[i], maxMPG); 
     minPrice = fillups[i].calcMin(price[i], minPrice); 
     maxPrice = fillups[i].calcMax(price[i], maxPrice); 
     fillups[i].printResults(i, day[i], distance[i], cost[i], milesPerGallon[i]); 
    } 

Метод calcMax, кажется, работает, но calcMin не делает. Возможно, есть способ заставить их работать с использованием констант Double.MAX_VALUE и Double.MIN_VALUE.

+3

У вас, похоже, одинаковые выражения для каждого случая, когда они должны быть противоположными. – chrylis

+1

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#min-double-double- –

+0

Спасибо всем за их вклад. Я смог исправить это и продолжить ваши предложения и примеры. –

ответ

0

Во-первых, я повторю свои два метода:

//calculate the minimum 
public double calcMin(double value, double min) 
{ 
    if (min < value) 
    { 
     min = value; 
    } 
    return value; 
} 

//calculate the maximum 
public double calcMax(double value, double max) 
{ 
    if (max < value) 
    { 
     max = value; 
    } 
    return max; 
} 

вы видите, что вы используете ту же логику для calcMin, как вы делаете для calcMax? Замените < на calcMin на >, и он должен работать.

Вы ищете меньшее значение, если заданное значение меньше, чем текущий известный минимум, тогда вы его заменяете. Вы можете начать с Double.MAX_VALUE для самого известного минимум в начале (и затем вы делаете его лучше с каждым раундом). Аналогично вы можете использовать Double.MIN_VALUE в первом раунде как наиболее известный максимум.

Меньше, гораздо более компактный способ заключается в использовании Math.min(double, double)max). Ваши методы сами делают некоторые бесполезные вещи, нет необходимости назначать min = value внутри метода, так как min и value удаляются при выходе из этого метода. Вы можете просто сделать это:

public double calcMin(double value, double min) { 
    if (min < value) { 
     return min; 
    } else { 
     return value; 
    } 
} 

Для нахождения наименьшего значения в Set вы можете использовать Collections.min(Set). Но имейте в виду, что этот метод должен искать весь набор. Возможно, лучше использовать хороший алгоритм сортировки. Также обратите внимание, что Set не имеет порядка для определения, List сортируется.

Ну, я думаю, вы поняли идею. Приветствия.

+2

Я не очень хорошо разбираюсь в Java, но не аргументы, переданные по значению? Если это так, то изменение «мин» не будет иметь побочных эффектов (т. Е. Вне функции). Другими словами, 'calcMin (v, minimum);' не изменяет 'minimum', поэтому функция абсолютно не влияет. То же самое для 'calcMax', конечно. –

+0

Это правильно. Переменные удаляются при выходе из области действия метода. Я написал это с целью исправить его метод. Но я также писал об этом. – Zabuza

+0

Я предполагаю, что главной целью 'calcMin' и' calcMax' было изменение минимального и максимального значений, если это было необходимо. Поскольку они этого не делают, вы можете просто назначить 'значение' напрямую.Но 'minimum' и' maximum' никогда не будут меняться. –

Смежные вопросы