0

これまでのところ、入力された配列値が「正しい」値 (0 から 100 の間) である場合にのみ実行される while ループを作成しようとしました。これは、入力された値が負の数または char のようなランダムなものである場合、ループを繰り返す必要があることを意味します。

これまでの私のコードは、入力されたすべての成績が正しくない場合にのみ機能します。0、100、および -2 を入力すると、-2 を指定するとループが繰り返されますが、それでも通過します。0 から 100 の間の値のみを配列に入力できるようにするには、何を変更する必要がありますか?

これまでのコード:

//Input validation for grades
int g = 0;

while(g >= 0)
{
  System.out.print("Please Enter the Students' Grades: ");
  for (int c = 0; c < studentGrades.length; c++)
  {
    studentGrades[c] = input2.nextInt();

    if (studentGrades[c] >= 0 && studentGrades[c] <= 100)
    {
       g = -1;
    }
  }
}
4

7 に答える 7

1

これはすべきです

     outer:
        while(g >= 0) {
            System.out.print("Please Enter the Students' Grades: ");

            for (int c = 0; c < studentGrades.length; c++) {
                studentGrades[c] = input2.nextInt();
                System.out.println(" input is "+studentGrades[c]);
                if (studentGrades[c] <= 0 || studentGrades[c] >= 100) {
                    break outer;
                }
            }
        }
于 2012-10-15T17:31:20.200 に答える
1

このコード スニペットでは:

studentGrades[c] >= 0 && studentGrades[c] <= 100

... 入力された成績が 0 以上で 100 以下の場合、g を -1 に設定します (そしてループを終了します)。

基本的に、有効な成績が入力されるたびに、ループは終了します。あなたはあなたが望んでいたこととは反対のことをしました。!条件を否定するには、条件の前にa を追加してみてください。

于 2012-10-15T17:23:36.117 に答える
0

studentGrades.lengthこのコードは、何があっても値を取得するまでループするように見えます。whileループが繰り返されると、gは再初期化されないため、永遠に繰り返されます。

これは宿題の問題に違いないと思うので、実際のコーディングは演習としてあなたに任せます。

于 2012-10-15T17:29:43.590 に答える
0

それぞれの成績を検証したいので、 のwhile loop中に移動してください: -for loopinputindex

そして、あなたの状態はg < 0. また、if で逆条件を使用しました。あなたはg = -1正しい入力のために設定していました。で条件を変更する必要がありますif

for (int c = 0; c < studentGrades.length; c++) {

    g = -1; // Set to invalid to get your while run first time.

    while(g < 0) {
        System.out.print("Please Enter the Students' Grades: ");
        studentGrades[c] = input2.nextInt();

        // Check invalid grade -> negative or more than 100
        if (studentGrades[c] < 0 || studentGrades[c] > 100) {
            g = -1;

        } else {
            // Break while if correct grade has been entered. Continue with next index
            break;  
        }
    }
}
于 2012-10-15T17:23:57.893 に答える
0

次を配列に追加する前にチェックを入れます。範囲外の場合は、別の値を求めてください。

于 2012-10-15T17:24:31.607 に答える
0

ロジックを反転する必要があります。現在、gフラグは「無効」として開始され (g変更されない場合、ループが継続することを意味します)、有効な成績が見つかったら有効としてマークgします。

代わりに、whileループの先頭で に設定gし、提供されたグレードのいずれかが無効な場合は-1に戻します。次に例を示します。0

int g = 0;
while(g >= 0) {
    g = -1;
    System.out.print("Please Enter the Students' Grades: ");
    for (int c = 0; c < studentGrades.length; c++) {
        studentGrades[c] = input2.nextInt();
        if (studentGrades[c] < 0 || studentGrades[c] > 100) {
            g = 0;
        }
    }
}
于 2012-10-15T17:27:05.743 に答える
0

これはあなたが達成しようとしていることだと思います(また、それを強化することもできます)

int[] values = new int[5]; //modify this according to your size
int index = 0;
do {
    int value;
    do {
        System.out.println("Enter value " + (index + 1) + ": ");                
        value = input.nextInt();
    } while (value < 0 || value > 100); //make sure each value is valid
    values[index++] = value; //add value to the array
} while(index < values.length); //make sure you get all the values

for ループが必要ない場合は、その方が見栄えが良いと思います。

于 2012-10-15T17:28:24.040 に答える