0

そのため、値を適切に取得する方法を理解するのに苦労しています。すべての計算は正しいですが、整数しか示していません。たとえば、87、42、および 94 の数字を入力すると、平均は 74.3 の繰り返しになるはずです。それでも、私には74.0しか出てきません。最低スコアの平均も同様です。

Scanner keyboard = new Scanner(System.in);

int a;
int b;
int c;
double grade;
double avg;
double avg2 = 0;

System.out.print("Enter score number 1: ");
a = keyboard.nextInt();
System.out.print("Enter score number 2: ");
b = keyboard.nextInt();
System.out.print("Enter score number 3: ");
c = keyboard.nextInt();

avg = ((a + b + c) / 3);


System.out.println("The average is: " + avg);

if (a < b && a < c)
{
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}


if (b < a && b < c)
{
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}


if (c < a && c < b)
{
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) /2));
    avg2 = ((a + b) / 2);
}
4

4 に答える 4

2

avg 式の分子の合計を double にキャストするか、分母に double を使用する必要があります。

平均 = ( (ダブル) (a + b + c) / 3);

また

平均 = ((a + b + c) / 3.0 );

于 2013-02-06T02:36:16.273 に答える
0

int右辺ですべて s を使用すると、答えは に代入されるint前にとして計算されdoubleます。これが、丸みを帯びた答えが得られる理由です。

修正するには、1つのオプションは、次のようにすべての分母に小数点以下を追加することです

avg = ((a + b + c) / 3.0d);

これにより、操作が強制的に実行されますdouble

于 2013-02-06T02:22:38.057 に答える
0

2 つの を除算intすると、 が返されintます。を返す除算を行うには、次のようdoubleにオペランドの 1 つを a にする必要があります。double

avg = ((a + b + c) / 3.0);
于 2013-02-06T02:24:54.717 に答える
0

これが Java での演算子の働きです。両方のオペランドが整数である除算などの算術演算がある場合、演算子は整数を生成します。このような分割操作では、一部の情報が失われる可能性があります。

あなたの場合、結果を double 型の変数に割り当てていますが、代入演算子は除算演算子が終了した後に実行されます。

情報を失いたくない場合は、任意のオペランドを目的の型に型キャストできます (この場合は double に)。

avg = (double)(a + b + c) / 3;

または

avg = (a + b + c) / (double)3;

さて、上記のステートメントでは、除算演算子には異なる型の 2 つのオペランドがあります。その結果、どちらか一方に優れたタイプになります。

于 2013-02-06T04:24:32.913 に答える