본문 바로가기
JAVA/[JAVA] 바구니

성적 입출력 프로그램 중 오류

by oncerun 2020. 2. 27.
반응형
package javaExample1;

import java.util.Scanner;

public class newlec {

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

		int kors[][] = new int[3][3];
		int total = 0;
		float avg;
		
		for (int j = 0; j < 3; j++) {
			for (int i = 0; i < 3; i++)
				kors[j][i] = 0;
		}

		EXIT: while (true) {
			System.out.println("┌───────────────┐");
			System.out.println("│         성적 출력  프로그램          │ ");
			System.out.println("└───────────────┘");
			System.out.println("1. 국어 성적 입력"); // 1학년 국어3 2학년 국어3
			System.out.println("2. 국어 성적 출력");
			System.out.println("3. 종료");
			System.out.print("입력 > ");

			String menu_ = scan.next(); 
			int menu = Integer.parseInt(menu_);

			switch (menu) {
			case 1:

				System.out.println("┌───────────────┐");
				System.out.println("│              성적   입력                  │ ");
				System.out.println("└───────────────┘");

				for (int j = 0; j < 3; j++) {
					for (int i = 0; i < 3; i++) { // 각입력에대한 오류값을 찾기위해
						do{
							System.out.printf("%d학년의 국어%d : ", j + 1, i + 1);
							kors[j][i] = scan.nextInt();

							if (kors[j][i] < 0 || kors[j][i] > 100)
								System.out.println("성적범위(0~100) 입니다.");

						}while (kors[j][i] < 0 || kors[j][i] > 100);
					}
				}

				break;

			case 2:
				
				System.out.println("┌───────────────┐");
				System.out.println("│              성적   출력                  │ ");
				System.out.println("└───────────────┘");

				for (int j = 0; j < 3; j++) {
					System.out.printf("----- %d학년 국어 성적--------\n", j + 1);
					total = kors[j][0] + kors[j][1] + kors[j][2];

					avg = total / 3.0f;

					for (int i = 0; i < 3; i++) {
						System.out.printf("%d국어 성적 : %3d\n", i + 1, total);
						System.out.printf("총점 :%3d\n", total);
						System.out.printf("평균 : %6.2f\n", avg);
					}
				}
				break;

			case 3:
				break EXIT;
			default:
				System.out.println("1~3까지의 숫자만 입력할 수 있습니다.");

			}
		}

		System.out.println("bye~~");
	}
}

28. String menu_ = scan.next(); 
29. int menu = Integer.parseInt(menu_);

라인에서 nextLine으로 했을 때 스위치 문을 빠져나가고 다시 while문이 안 돌고 꺼져버리는 오류가 있었는데.

이유는 성적 입력 부분의 scan.nextInt()에서 마지막으로 3학년의 국어 3을 입력받고 엔터를 누르면

scan.nextInt()는 버퍼에서 숫자만 가져오고 엔터를 남겨두게 된다.

그다음 와일문으로 초기 부분으로 올라가서 입력을 받을 때  버퍼에 있던 엔터가 입력되면서 종료되는 상황이었다.

 

1.  scannextLine()을  next로 바꿔주는 방법이 있고.

2. System.out.printf("% d학년의 국어% d : ", j + 1, i + 1);
   kors [j][i] = scan.nextInt();에서 

   * scan.nextLine();으로 버퍼를 비워주는 방법이 있다.

 

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

JAVA 구조적인 프로그래밍 Top Down  (0) 2020.02.28
JAVA 구조적인 프로그래밍 Bottom Up  (0) 2020.02.28
JAVA 연산자 -1  (0) 2020.02.20
JAVA 값과 형식  (0) 2020.02.20
통합 개발환경 Eclipse 단축기 정리  (0) 2020.02.20

댓글