-1

ユーザーが入力した数値が前の数値よりも大きい限り、Java からユーザーからすべての数値を読み取る必要があります。しかし、私は正の数だけのためにそれを書くことができました。すべての数字が含まれている場合、以下のコードを修正するにはどうすればよいですか。可能であれば、初心者向けのソリューションを書いてください。大学でコンピューター サイエンスを学ぶのは 1 年目で、まだ多くのことを学んでいないからです。

import acm.program.*;

public class IncreasingOrder extends ConsoleProgram {

public void run() {

    int previousNumber = 0;

    int total = 0;

    int count = 0;

    while(true) {
        int n = readInt("Enter > ");
        if (n <= previousNumber) break;

        total += n;
        count++;
        previousNumber = n;
    }
    println("You have entered " + count + " numbers in increasing order.");
    println("Sum of these " + count + " numbers is " + total + ".");        
}

}

4

3 に答える 3

2

use Integer.MIN_VALUE instead of 0 for previousNumber initialization. Then should work for negative numbers.

于 2013-11-09T09:54:09.770 に答える
0

あなたが書いた:

int previousNumber = 0;

負の数を入力できない理由は、プログラムが、計算に含まれていない最初の値が 0 であると想定するためです。それ未満の値を入力すると、プログラムは終了します。

この問題を解決するには 2 つの方法があります。の初期値を小さく設定してpreviousNumber、いくつかの負の数を許可することができます。たとえば、-1000 に設定した場合、ユーザーは -999 以上を入力できます。どの値を使用する必要がありますか? さて、すべての int 値が以上であることがわかっているInteger.MIN_VALUEので、それを使用できます。

しかし、ユーザーがたまたま入力する-2147483648と、拒否されます。なんで?それはたまたま正確に であるからですInteger.MIN_VALUE。したがって、それは良い解決策ではありません。

ユーザーが最初に入力する数値は、前の入力と比較できないため、特別な処理が必要です。したがって、1 つの解決策は、ループの外側で最初の数値を個別に読み取ることです。

int previousNumber = readInt("Enter > ");

int total = previousNumber;

int count = 1;

while(true) {
    int n = readInt("Enter > ");
    if (n <= previousNumber) break;

    total += n;
    count++;
    previousNumber = n;
}

別の解決策は、ユーザーがすでに最初の入力を行ったかどうかを示すフラグ変数を維持することです。

boolean isFirst = true;
while(true) {
    int n = readInt("Enter > ");
    if (!isFirst && n <= previousNumber) break;

    total += n;
    count++;
    previousNumber = n;
    isFirst = false;
}

どのスタイルを使用するかは、好みによって異なります。

于 2013-11-09T10:06:09.463 に答える
0

確かに、最初の数字で壊れることはありません。そのため、ブール値を設定してステータスを保存します。2番目の数値が入力されるまで、その数値が大きいかどうかを確認しません。ACMで頑張ってください。

import acm.program.*;

public class IncreasingOrder extends ConsoleProgram {

public void run() {

    int previousNumber = 0;

    int total = 0;

    int count = 0;
    boolean first = true;
    while(true) {
        int n = readInt("Enter > ");
        if (!first && n <= previousNumber) break;
        first = false;
        total += n;
        count++;
        previousNumber = n;
    }
    println("You have entered " + count + " numbers in increasing order.");
    println("Sum of these " + count + " numbers is " + total + ".");        
}
}
于 2013-11-09T09:56:03.100 に答える