2014-11-21 93 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消耗,就可以顺利移动正向读取用户输入是/否。