2014-11-21 8 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 <>이라고 말하면됩니다. API nextInt는 56을 읽고 nextLine API에 의해 소비되는 입력을 남겨 둡니다.

중위는이를 방지하기 위해, 아래에 SYSOUT 직전 :

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

유형 다음 줄 : 당신의 < 입력하도록

scan.nextLine(); 

>가이 API에 의해 소모됩니다 성공적으로 이동할 수 있습니다 앞으로 읽는 사용자 입력 예/아니요.