2016-07-11 1 views
0

基本的なJavaプログラムでは、クラスの2つのメソッドを定義しました。これは、4つの倍精度のセットから最大と最小の数を返すことになっています。 valueパラメーターはforループから取り込まれ、その後、立っているminパラメーターまたはmaxパラメーターと比較されます。しかし、出力が正しくないと私は理由を見つけることができません。私はどこかで論理エラーを起こしたことを知っています。セットから最大または最小ダブルをどのように見つけますか?

2 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; 
} 

ザ・LOOP-

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

まず、私はあなたの2つのメソッドを繰り返します:

//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; 
} 

あなたはcalcMaxのためにそうであるように、あなたがcalcMinのために同じロジックを使用していることがわかりますか? <calcMinに置き換えて>に置き換えると正常に動作します。

したがって、指定された値がより小さい場合は、現在の既知の最小値より小さいを探して、それを置き換えます。 Double.MAX_VALUEは、最初によく知られているで始まる場合があります。同様に、最もよく知られているように、第1ラウンドでDouble.MIN_VALUEを使用することができます最大です。

さらに小さくてコンパクトな方法は、Math.min(double, double)(および最大)を使用することです。 あなた自身のメソッド自体は役に立たないものですが、メソッド内にmin = valueを代入する必要はありません。minvalueは、このメソッドのスコープを離れると削除されます。あなたがCollections.min(Set)を使用することができSetで最小値を見つけるための

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

:あなたは、単にこれを行うことができます。しかし、このメソッドはセット全体を検索する必要があることに注意してください。最初に良いソートアルゴリズムを使用するほうが良いかもしれません。 Setには定義ごとに順序がないことに注意してください。Listはソート可能です。

まあ、私はあなたが考えを得ると思います。乾杯。

+2

私はJavaに精通していませんが、値渡しの引数ではありませんか?もしそうなら、 'min'を変更することは、副作用(すなわち、関数の外側)を持たないでしょう。言い換えれば、 'calcMin(v、minimum);'は 'minimum'を変更しないので、関数は全く効果がありません。もちろん、 'calcMax'と同じです。 –

+0

それは正しいです。変数はメソッドのスコープを離れると削除されます。私は彼の方法を修正する目的でこれを書いた。しかし、私もこれについて書きました。 – Zabuza

+0

私は 'calcMin'と' calcMax'の主な目標は最小値と最大値を必要に応じて変更することでした。彼らはそれをしないので、単に 'value'を直接割り当てることができます。しかし、「最小」と「最大」は決して変化しません。 –

関連する問題