[TIL 26/02/04] (Java) (1) 무한 반복문
2026. 2. 4. 13:07

어제 작성했던 조건문 예제인 점수에 따른 학점 구하기

//점수로 학점 구하기
int score = 83;
String grade;

if(score >= 95) grade = "A+";
else if(score >= 90) grade = "A";
else if(score >= 85) grade = "B+";
else if(score >= 80) grade = "B";
else if(score >= 75) grade = "C+";
else if(score >= 70) grade = "C";
else grade = "F"

 

를 Scanner로 점수를 받아 반복문으로 처리하는 게 오늘의 실습 예제 1(while문), 2번(for문)이었다.

 

//ex01 : while문으로 학점 구하기
Scanner input = new Scanner(System.in);

ArrayList<String> grades = new ArrayList<>();

while(grades.size() < 3) {
    int score = input.nextInt();

    if(score >= 95) grades.add("A+");
    else if(score >= 90) grades.add("A");
    else if(score >= 85) grades.add("B+");
    else if(score >= 80) grades.add("B");
    else if(score >= 75) grades.add("C+");
    else if(score >= 70) grades.add("C");
    else grades.add("F");
}

for(String str : grades) {
    System.out.println(str);
}


//ex02 : for문으로 학점 구하기

String[] grades2 = new String[3];

for(int i = 0; i < grades2.length; i++) {
    int score = input.nextInt();

    if(score >= 95) grades2[i] = "A+";
    else if(score >= 90) grades2[i] = "A";
    else if(score >= 85) grades2[i] = "B+";
    else if(score >= 80) grades2[i] = "B";
    else if(score >= 75) grades2[i] = "C+";
    else if(score >= 70) grades2[i] = "C";
    else grades2[i] = "F";
}

for(String str : grades2) {
    System.out.println(str);
}

 

이 중에 2번째 예제인 for문으로 구현한 학점 처리 코드를 무한 반복문으로 구현하는 것이 3번이었다.

 

먼저 초안을 보면

 

//초안

ArrayList<String> grades3 = new ArrayList<>();

for(;;) {
    System.out.println("keep, quit 중 하나를 입력해주세요.");

    String going = input.next();

    if(going.equals("quit")) {
        System.out.println("반복을 종료합니다.");
        break;
    }

    else if(!going.equals("keep")){
        System.out.println("다시 입력해주세요.");
        continue;
    }

    System.out.println("점수를 입력해주세요.");

    int score = input.nextInt();

    if(score >= 95) grades3.add("A+");
    else if(score >= 90) grades3.add("A");
    else if(score >= 85) grades3.add("B+");
    else if(score >= 80) grades3.add("B");
    else if(score >= 75) grades3.add("C+");
    else if(score >= 70) grades3.add("C");
    else grades3.add("F");;

}

for(String str : grades3) {
	System.out.println(str);
}

 

 

점수로 학점을 구하는 데엔 문제가 없지만 "keep"도 "quit"도 아닌 문자를 입력하면 "다시 입력해주세요." 문구가 뜨고, "keep, quit 중 하나를 입력해주세요." 라는 문구가 함께 뜨는 것이 보기 불편했다. 

 

내가 원하는 것은 정상적인 루프를 돌았을 땐 "keep, quit 중 하나를 입력해주세요." 가 출력되고 잘못 입력됐을 때는 "다시 입력해주세요." 라는 문구만 출력되는 것이었다. 

 

그래서 boolean 변수 notice를 만들어 조건을 넣도록 코드를 수정했다.

 

//최종 코드
		
ArrayList<String> grades3 = new ArrayList<>();

boolean notice = true;
		
for(;;) {
	if(notice) System.out.println("keep, quit 중 하나를 입력해주세요.");
			
	String going = input.next();
			
	if(going.equals("quit")) { 
		System.out.println("반복을 종료합니다.");
		break;
	}
			
	else if(!going.equals("keep")){
		System.out.println("다시 입력해주세요.");
		notice = false;
		continue;
	}
			
	System.out.println("점수를 입력해주세요.");
			
	int score = input.nextInt();
			
	if(score >= 95) grades3.add("A+");
	else if(score >= 90) grades3.add("A");
	else if(score >= 85) grades3.add("B+");
	else if(score >= 80) grades3.add("B");
	else if(score >= 75) grades3.add("C+");
	else if(score >= 70) grades3.add("C");
	else grades3.add("F");;
			
	notice = true;
}
		
for(String str : grades3) {
	System.out.println(str);
}

 

이전 코드와 동일하게 실행을 해보면

 

 

내가 원하는 대로 결과가 나온 것을 볼 수 있다.