2017-10-28 246 views
0

我是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)); 

这里是我的输出:

Output link

回答

1

在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)); 

只需删除上述片断的前两行的每个输入回路。

+0

非常感谢你解释了while和while循环之间的区别!我只是回来补充说,你完全改变了我一直在考虑循环。我在课程的这一部分遇到了麻烦,这真的帮了大忙!谢谢! – iMagicMango

+0

不客气,我很高兴它帮助你。 –