0

到目前为止,我已经尝试创建一个 while 循环,只有在输入的数组值是“正确”的值(0 到 100 之间)时才会退出。Wich 意味着如果输入的值是负数或像字符这样的随机值,则循环应该重复。

到目前为止,我的代码只有在输入的所有成绩都不正确时才有效。如果我输入 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

在此代码段中:

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

...您是说如果输入的等级大于或等于 0 且小于或等于 100,则将 g 设置为 -1(并退出循环)。

因此,基本上,每次输入有效成绩时,您的循环都会退出。你做了与你想要的相反的事情。尝试!在您的条件之前添加一个来否定它。

于 2012-10-15T17:23:36.117 回答
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 回答
0

移动你的while loop内部for loop,因为我想你想验证你的input成绩index: -

你的条件应该是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 回答
0

studentGrades.length无论如何,这段代码看起来都会循环直到它得到值,如果while循环重复,它将永远重复,因为g没有重新初始化。

我认为这一定是一个家庭作业问题,所以我将把修复错误的实际编码留给你作为练习。

于 2012-10-15T17:29:43.590 回答