어제 작성했던 조건문 예제인 점수에 따른 학점 구하기
//점수로 학점 구하기
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);
}
이전 코드와 동일하게 실행을 해보면

내가 원하는 대로 결과가 나온 것을 볼 수 있다.
'AIBE5 TIL' 카테고리의 다른 글
| [TIL 26/02/09](Java) 상속 (0) | 2026.02.09 |
|---|---|
| [TIL 26/02/06](Java) 접근제어자와 캡슐화 (0) | 2026.02.06 |
| [TIL 26/02/05](Java) 배열(Array)과 Wrapper Class (0) | 2026.02.05 |
| [TIL 26/02/04] (Java)(2) 데이터타입(기본형, String) (0) | 2026.02.04 |
| [TIL 26/02/03] (Java) Switch Case (0) | 2026.02.03 |