오류 java.lang.NumberFormatException : For input string: ""

  • 오류원인 :

nextInt()메소드가 사용자가 입력한 enter를 제거하지 않기때문.

입력버퍼에 엔터값이 그대로 남아있게된다.

다음 scan.nextLine()이 남겨진 개행문자를 읽어들이고 parsing하다가 오류가난다.

 

 

  • 오류해결 1 : nextInt()뒤에 nextLine()추가

menu = scan.nextInt();

scan.nextLine(); 남은 엔터값을 없애주기

 

 

  • 오류해결 2 : nextLine()을 입력받아 형변환하기

menu = Integer.pasrseInt(scan.nextLine()); 

scan.nextLine()가 문자를 읽어들인후 Integer.pasrseInt가 변환을한다.

문자열로 읽어서 조건검사를 하는것이 좀더 바람직하다.

package ex2.control;

import java.util.Scanner;

public class ProgramWithMenu {

	public static void main(String[] args) {
	      Scanner scan = new Scanner(System.in); // 반복에 포함될 필요없음
	      int kor, eng;
	      int math;
	      int total;
	      float avg;

	      kor = 0;
	      eng = 0;
	      math = 0;
	      
	      boolean more = true; //인위적으로바꾼것
	      
	      while(more)
	      {
	    	  int menu;
	      // 여기에 성적을 입력하는 코드를 작성하시오.
		      
		      System.out.println("┌────────────────────┐");
		      System.out.println("│       메인메뉴      │");
		      System.out.println("└────────────────────┘");
		      
		      System.out.println("1.성적입력");
		      System.out.println("2.성적출력");
		      System.out.println("3.종료");
		      System.out.print(">");
		      menu = Integer.parseInt(scan.nextLine());
		      
		      if(menu==1) {
			      System.out.println("┌────────────────────┐");
			      System.out.println("│       성적 입력      │");
			      System.out.println("└────────────────────┘");


			      System.out.printf("국어 : ");
			      kor = Integer.parseInt(scan.nextLine());
			      System.out.printf("영어 : ");
			      eng = Integer.parseInt(scan.nextLine());
			      System.out.printf("수학 : ");
			      math = Integer.parseInt(scan.nextLine());
		      }
		      else if(menu==2) //1번일경우 더이상 2를할필요없다.->else if
		      {
			      total = kor + eng + math;
			      avg = total / 3.0f;
		
			      System.out.println("┌────────────────────┐");
			      System.out.println("│       성적 출력      │");
			      System.out.println("└────────────────────┘");
		
			      System.out.printf("국어 : %d\n", kor);
			      System.out.printf("영어 : %d\n", eng);
			      System.out.printf("수학 : %d\n", math);
		
			      System.out.printf("총점 : %2d\n", total);
			      System.out.printf("평균 : %26.2f\n", avg);
		
		      }
		      else if(menu==3) {
			      more = false;
		      }
		    }
	      System.out.println("Bye~");
	}
}

 

 

+ Recent posts