2017-10-28 118 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

不客氣,我很高興它幫助你。 –