while循环重复两次,不遵循条件
问题描述:
我是Java新手,遇到了一些问题。我的教师要求我在while循环中嵌套do while循环; do while循环会为中期,最终和项目等级的用户可输入的等级类型(大于0但小于100)创建限制。然后将此输入用于计算这三个等级的平均值。while循环重复两次,不遵循条件
但是,我的while while循环运行了两次,并使用来自计算中第二个提示的输入的平均值。我究竟做错了什么?我已经浏览了我的教科书和这个网站,但我似乎无法理解为什么它这样做,因为它只提示两次,然后只使用第二个提示的输入。任何帮助将不胜感激。感谢您花时间阅读我的文章!
为了清楚起见,这里是我的代码:
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));
这里是我的输出:
答
在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));
只需删除上述片断的前两行的每个输入回路。
非常感谢你解释了while和while循环之间的区别!我只是回来补充说,你完全改变了我一直在考虑循环。我在课程的这一部分遇到了麻烦,这真的帮了大忙!谢谢! – iMagicMango
不客气,我很高兴它帮助你。 –