오류 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~");
}
}
'2021 Newlecture > JAVA' 카테고리의 다른 글
배열 / FileInputStream / Scanner()/ hasNextLine() / while() (0) | 2021.03.10 |
---|---|
배열/ 랜덤값 radom()/ 섞기 / 버블정렬(가장 큰 숫자찾기) (0) | 2021.03.10 |
File Stream이용해 파일복사하기/ read(byte[] b)/ 배열과 for문 / (0) | 2021.03.09 |
if / switch / 중첩된 제어구조 벗어나기 /do while (0) | 2021.03.08 |
복합 대입연산자 / 삼항연산자 (0) | 2021.03.08 |
제어구조 / FileStream을 통해 파일복사 (0) | 2021.03.05 |
쉬프트연산 / 진법 / 0x000000ff과 교집합 (0) | 2021.03.05 |
FileInputStream으로 Bitmap File Size 출력 (0) | 2021.03.04 |