2014-11-21 38 views
0

在這段代碼中,用戶鍵入一個測試標記,它應該打印出分數並詢問用戶是否想輸入另一個標記,但是,我的問題是它打印出這個位兩次,不知道爲什麼?在while循環內打印兩行代碼?

import java.util.Scanner; 

public class ExamGrades { 

    public static void main(String[] args) { 
     int mark; 
     String answer; 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Enter student mark: "); 
     mark = scan.nextInt(); 
     while (mark >= 0) { 

      if (mark < 40) { 
       System.out.println("FAILED."); 
      } else if (40 <= mark && mark <= 49) { 
       System.out.println("3rd"); 
      } else if (50 <= mark && mark <= 59) { 
       System.out.println("2/2"); 
      } else if (60 <= mark && mark <= 69) { 
       System.out.println("2/1"); 
      } else if (mark >= 70 && mark <= 100) { 
       System.out.println("1st"); 
      } else if (mark > 100) { 
       System.out.println("Invalid mark"); 
      } 

      System.out.println("Enter another mark? Yes or No: "); 
      answer = scan.nextLine(); 

      if (answer.equalsIgnoreCase("yes")) { 
       System.out.println("Enter student mark: "); 
       mark = scan.nextInt(); 
      } else if (answer.equalsIgnoreCase("no")) { 
       mark = -1; 
       System.out.println("Thank you."); 
      } 

     } 
     scan.close(); 
    } 
} 

感謝您給予的任何幫助。

回答

2

原因是當你輸入標記時,你按說56 < enter>。您的API nextInt只讀取56,然後輸入nextLine api消耗的內容。

中序,以避免這種情況,就在你的系統輸出如下:

System.out.println("Enter another mark? Yes or No: "); 

鍵入下列命令行:

scan.nextLine(); 

使您<進入>獲取此API消耗,就可以順利移動正向讀取用戶輸入是/否。