做 while 循环重复两次,不遵循条件
Do while loop repeats twice, doesn't follow conditions
我是 Java 的新手,我 运行 遇到了一些问题。我的导师要求我在 while 循环中嵌套一个 do while 循环; do while 循环对用户可以为期中、期末和项目成绩输入的成绩类型(大于 0 但小于 100)创建了限制。然后,此输入将用于计算这三个成绩的平均值。
但是,我的 do while 循环 运行s 两次,并在计算平均值时使用第二个提示的输入。我究竟做错了什么?我浏览了我的教科书和这个网站,但我似乎无法理解为什么要这样做,因为它只提示两次,然后只在第二次提示时使用输入。任何帮助将不胜感激。感谢您花时间阅读我的 post!
为了澄清,这是我的代码:
System.out.println("******** Step 2: Grading for Multiple Students *********");
System.out.println();
// Create scanner object for text and number
Scanner textReader = new Scanner(System.in);
Scanner numberReader = new Scanner(System.in);
System.out.print("Would you like to input grades (y/n): ");
String response = textReader.nextLine();
// Create while loop for first yes/no question
while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n")))
{
System.out.print("y/n needed: ");
response = textReader.nextLine();
System.out.println();
}
while ((response.equalsIgnoreCase("y")))
{
System.out.print("\nStudent Name: ");
String studentName = textReader.nextLine();
System.out.print("Course Name: ");
String courseName = textReader.nextLine();
System.out.print("Midterm Grade (needs to be between 0-100): ");
double midtermGrade = numberReader.nextDouble();
do
{
System.out.print("Midterm Grade (needs to be between 0-100): ");
midtermGrade = numberReader.nextDouble();
break;
}
while ((midtermGrade < 0) || (midtermGrade > 100));
System.out.print("Final Grade (needs to be between 0-100): ");
double finalGrade = numberReader.nextDouble();
do
{
System.out.print("Final Grade (needs to be between 0-100): ");
finalGrade = numberReader.nextDouble();
}
while ((finalGrade < 0) || (finalGrade > 100));
System.out.print("Project Grade (needs to be between 0-100): ");
double projectGrade = numberReader.nextDouble();
do
{
System.out.print("Project Grade (needs to be between 0-100): ");
projectGrade = numberReader.nextDouble();
}
while ((projectGrade < 0) || (projectGrade > 100));
这是我的输出:
Output link
在 do-while 循环中,无论条件如何,循环至少被调用一次。
在普通的 while 循环中,只有满足条件时才会调用循环。
而不是
System.out.print("Final Grade (needs to be between 0-100): "); // remove this
double finalGrade = numberReader.nextDouble(); // remove this
do
{
System.out.print("Final Grade (needs to be between 0-100): ");
finalGrade = numberReader.nextDouble();
}
while ((finalGrade < 0) || (finalGrade > 100));
只需为每个输入循环删除上述代码片段的前两行。
我是 Java 的新手,我 运行 遇到了一些问题。我的导师要求我在 while 循环中嵌套一个 do while 循环; do while 循环对用户可以为期中、期末和项目成绩输入的成绩类型(大于 0 但小于 100)创建了限制。然后,此输入将用于计算这三个成绩的平均值。
但是,我的 do while 循环 运行s 两次,并在计算平均值时使用第二个提示的输入。我究竟做错了什么?我浏览了我的教科书和这个网站,但我似乎无法理解为什么要这样做,因为它只提示两次,然后只在第二次提示时使用输入。任何帮助将不胜感激。感谢您花时间阅读我的 post!
为了澄清,这是我的代码:
System.out.println("******** Step 2: Grading for Multiple Students *********");
System.out.println();
// Create scanner object for text and number
Scanner textReader = new Scanner(System.in);
Scanner numberReader = new Scanner(System.in);
System.out.print("Would you like to input grades (y/n): ");
String response = textReader.nextLine();
// Create while loop for first yes/no question
while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n")))
{
System.out.print("y/n needed: ");
response = textReader.nextLine();
System.out.println();
}
while ((response.equalsIgnoreCase("y")))
{
System.out.print("\nStudent Name: ");
String studentName = textReader.nextLine();
System.out.print("Course Name: ");
String courseName = textReader.nextLine();
System.out.print("Midterm Grade (needs to be between 0-100): ");
double midtermGrade = numberReader.nextDouble();
do
{
System.out.print("Midterm Grade (needs to be between 0-100): ");
midtermGrade = numberReader.nextDouble();
break;
}
while ((midtermGrade < 0) || (midtermGrade > 100));
System.out.print("Final Grade (needs to be between 0-100): ");
double finalGrade = numberReader.nextDouble();
do
{
System.out.print("Final Grade (needs to be between 0-100): ");
finalGrade = numberReader.nextDouble();
}
while ((finalGrade < 0) || (finalGrade > 100));
System.out.print("Project Grade (needs to be between 0-100): ");
double projectGrade = numberReader.nextDouble();
do
{
System.out.print("Project Grade (needs to be between 0-100): ");
projectGrade = numberReader.nextDouble();
}
while ((projectGrade < 0) || (projectGrade > 100));
这是我的输出:
Output link
在 do-while 循环中,无论条件如何,循环至少被调用一次。 在普通的 while 循环中,只有满足条件时才会调用循环。
而不是
System.out.print("Final Grade (needs to be between 0-100): "); // remove this
double finalGrade = numberReader.nextDouble(); // remove this
do
{
System.out.print("Final Grade (needs to be between 0-100): ");
finalGrade = numberReader.nextDouble();
}
while ((finalGrade < 0) || (finalGrade > 100));
只需为每个输入循环删除上述代码片段的前两行。