-1

タイトルにある通り、最大値と最小値、偶数と奇数の量、および入力されたすべての数値の平均を見つけようとしています。

問題。コードを実行すると、オッズ カウンターとイーブン カウンターの読み取り値が逆になっているように見えます。奇数は偶数入力を読み取り、偶数は奇数入力を読み取ります。私の平均については、何が問題なのかわかりません。わかっているのは、適切な分数の平均しか見つからないということだけです。

また、quit と入力すると、最大数 214XXXXXXXX が得られます。

私の出力の例は最後に貼り付けられます。

System.out.println("Enter a sequence of integers. Any non-integer to quit");
Scanner scan = new Scanner(System.in);
int min = Integer.MAX_VALUE;
int max = 0;
int count = 0;
int sum = 0;
int oddsCounter = 0;
int evensCounter = 0;
int getInt;
double average = 0;

while (scan.hasNextInt()) {

    getInt = scan.nextInt();
    if (getInt % 2 == 0) {
        evensCounter++;
        System.out.println("even: " + evensCounter);
    } else {
        oddsCounter++;
        System.out.println("odd: " + oddsCounter);
    }

    if (getInt < min) {
        min = getInt;
    } else if (getInt > max) {
        max = getInt;
    }

    sum += getInt;
    System.out.println("sum " + sum);
    count++;
    System.out.println("count " + count);
    average = (double) sum / (count);
    System.out.println("average " + average);
}

System.out.println("smallest: " + min);
System.out.println("largest: " + max);
System.out.println("even: " + oddsCounter);
System.out.println("odd: " + evensCounter);
System.out.println("average: " + average);

結果:

Enter a sequence of integers. Any non-integer to quit
9 //input 1
odd: 1
sum 9
count 1
average 9.0
3 //input 2
odd: 2
sum 12
count 2
average 6.0
7 //input 3
odd: 3
sum 19
count 3
average 6.333333333333333
1 //input 4
odd: 4
sum 20
count 4
average 5.0
q //input 5: QUIT
smallest: 1
largest: 7 //This should be 9
even: 0
odd: 4
average: 5.0

結果 2:

Enter a sequence of integers. Any non-integer to quit
q //quit
smallest: 2147483647 //This should be 0
largest: 0
even: 0
odd: 0
average: 0.0

どんな助けでも大歓迎です。ありがとうございました!

4

4 に答える 4

0

初め

9 は最大に割り当てられませんでした。以来9 < min、コードは評価されmin = getInt;、else if 部分をスキップします。

そのはず :

if (getInt < min) 
{
     min = getInt;
} 

if (getInt > max) 
{
     max = getInt;
}

数値は と の両方minになる可能性があるためmaxです。

2番

smallest: 2147483647 //This should be 0

これは、文字を入力したが、使用して整数としてスキャンするgetInt = scan.nextInt();(および入力を int として格納する) ために発生します。

最初に文字列として入力でこのスキャンを修正できます。次に、入力をチェックするメソッドを作成して、入力が int かどうかを判断します。:

public static boolean isInteger(String s) 
{
    try 
    { 
        Integer.parseInt(s); 
    } 
    catch(NumberFormatException e) 
    { 
        return false; 
    }
    // only got here if we didn't return false
    return true;
}

次に、計算を行う前に、入力が整数かどうかを確認します。

于 2013-03-23T07:26:58.120 に答える
0

getInt が max より大きいかどうかを確認する前に、else を取り出します。両方の条件を確認する必要があるため、else を指定しないでください。

于 2013-03-23T07:27:08.650 に答える
0

あなたの他の問題に関しては、最小値を 0 として初期化する必要があります。その後、入力が最初のものかどうかを確認し、そうであれば最小値をそのように設定します。

boolean isFirst = true;
while (scan.hasNextInt()) {

getInt = scan.nextInt();
if(isFirst)
{
     min = getInt;
     isFirst=false;
}
//Rest of your code

}

于 2013-03-23T07:45:30.483 に答える
0
if (getInt < min) {
        min = getInt;
    } else if (getInt > max) {
        max = getInt;
    }

上記のコードを以下のように変更します。両方の条件を確認する必要があるため、else if を if に変更します。

場合 - そうでなければ

条件が満たされると、適切なステートメントが実行され、残りの条件は評価されません。

if (getInt < min) {
        min = getInt;
    } 
if (getInt > max) {
        max = getInt;
    }
于 2013-03-23T07:48:03.987 に答える