JAVA
[Java] 조건문, 반복문
eehdev
2023. 1. 3. 00:43
조건문
1. if문
(조건식)을 만족할 때 { } 안의 내용을 수행
예제) java와 html 점수를 입력 받아 두 과목 중 한 과목이라도 80점 이상이면 '통과' 그렇지 않으면 '재시험' 처리
import java.util.Scanner;
public class IfAndWhile {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("자바와 html 점수를 입력하세요.");
int java = scan.nextInt();
int html = scan.nextInt();
if (java >= 80 || html >= 80) {
System.out.println("통과");
} else {
System.out.println("재시험");
}
}
}
2. If~else if
예제) 점수 입력 받아 학점 결과내기
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char grade = 'D';
System.out.println("점수를 입력하세요>>");
int score = scan.nextInt();
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} // end of if
System.out.println("입력한 점수 : " + score);
System.out.println("학점 : " + grade);
}
- else() 블럭 생략
- 기본적으로 char grade = 'D';로 설정하여 아닌 경우에만(false) if문으로 들어가 값을 받는다.
- 70점 미만일 경우엔 if문의 어느 블럭도 실행되지 않고 빠져나와 D학점이 나온다.
3. switch문
- 처리해야하는 경우의 수가 많을 때
- 조건식의 결과는 int 범위 이하의 정수, 문자, 문자열만 가능하다.
- case문의 값은 정수, 상수(문자 포함), 문자열만 가능하다(변수, 실수❌)
- 중복되지 않아야 한다.
더보기

//주민번호를 입력 받아 (123971013-1234567) 7번째자리가 1 -남, 2 - 여, 3- 남, 4-여
Scanner scan = new Scanner(System.in);
System.out.println("주민번호 입력>>");
String num = scan.next();
char ssn = num.charAt(7);
switch (ssn) {
case '1' : // '1' 실행하고 "남" 찍고 break를 만나 switch문을 빠져나옴
case '3' : // '3' 실행하고 "남" 찍고 break를 만나 switch문을 빠져나옴
System.out.println("남");
break;
case '2' :
case '4' :
System.out.println("여");
break;
default:
System.out.println("없는 주민등록번호입니다.");
}

더보기
import java.util.Scanner;
public class SwitchExam {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("현재 월을 입력하세요.>>");
int month = scan.nextInt(); //입력 받은 값을 month에 저장
switch(month) {
case 1: case 2: case 12:
System.out.println("현재의 계절은 겨울입니다");
break;
case 3: case 4: case 5:
System.out.println("현재의 계절은 봄입니다.");
break;
case 6: case 7: case 8:
System.out.println("현재의 계절은 여름입니다.");
break;
default:
System.out.println("현재의 계절은 가을입니다."); //9,10,11월
} // switch 문
} //main 끝
}
현재 월을 입력 받아 month에 저장
1월, 2월, 12월은 겨울 / 3월, 4월, 5월은 봄 / 6월, 7월, 8월은 여름으로 잡고 default를 가을로 지정.
더보기
Scanner scan = new Scanner(System.in);
int orderCode1 = 0;
// String orderCodeString = "";
System.out.println("음료를 주문하세요\n" + "1:커피 2:홍차 3:라떼 4:콜라 0:주문종료");
String orderCodeString = scan.next();
// switch문
switch (orderCodeString) {
case "1":
System.out.println("커피를 주문하셨습니다.");
break;
case "2":
System.out.println("홍차를 주문하셨습니다.");
break;
case "3":
System.out.println("라떼를 주문하셨습니다.");
break;
case "4":
System.out.println("콜라를 주문하셨습니다.");
break;
case "0":
System.out.println("주문을 종료합니다.");
break;
default:
System.out.println("잘못주문하셨습니다:( 다시 주문하세요.");
}
반복문
- for문 : 규칙적인 반복, 반복하려는 횟수를 알고 있을 때.
- while문 : 조건이 중요할 때, 조건이 맞지 않으면 한 번도 실행하지 않을 수 있음.
- do ~ while문 : 조건이 중요할 때, 반드시 한 번은 실행.
1. for문
더보기

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("구구단 숫자 입력>");
int dan = scan.nextInt();
// dan = Integer.parseInt(scan.next());
System.out.println("<< " + dan + "단 >>");
for (int num1 = 1; num1<=9; num1++ ) {
// System.out.println(dan + "*" + num1 + " = " + (dan * num1));
System.out.printf("%d * %d = %2d\n", dan, num1, dan*num1);
}
}

1-2. 중첩 for문
public class ForAndWhile {
public static void main(String[] args) {
for (int i = 2; i <= 9; i++) { // i가 2일때 안쪽 for문을 9번 돌고 i=3으로 넘어감
for (int j = 1; j <= 9; j++) {
System.out.println(i + " * " + j + " = " + (i * j));
}
System.out.println();
}
}
더보기

for(int i=1; i<=10; i++) {
for(int j=1; j<=i; j++) {
System.out.print("*");
}
System.out.println();
}

i가 1일 때 j 1번 반복
i가 2일 때 j 2번 반복, 3일때 j 3번 반복
이를 응용해서 알고리즘 수업 때 다양한 모양으로 만들어보았다.
반복문은 이후에도 많이 사용하니 꾸준히 연습할 것!🙂
1-3. 향상된 for문
- 배열 인덱스 문제를 해결할 수 있다. (ArrayIndexOutOfBoundsException 예외 방지)
for ( 타입변수명 : 배열 또는 컬렉션) {
//반복할 문장
}
// 향상된 for문으로 배열의 요소 모두 출력
int[] arr = {10, 20, 30, 40, 50}
for (int tmp : arr) {
System.out.println(tmp);
}
2. While문 - 조건이 중요할 때, 반복횟수 모를 때
- 조건식이 참이면 블럭{ }내의 문장을 수행하고 다시 조건식으로 돌아간다.
- 거짓이 될때까지 이 과정을 계속 반복하고 거짓이면 문장 전체를 벗어난다.
- for문과 달리 while문의 조건식은 생략할 수 없어서 항상 참이 되도록 하려면 true를 넣어야 한다.
< for문과 while문의 비교 → 변환 가능 >
2-1. do-while문
- 블럭{}을 반드시 한 번 이상 반복한다. 사용자 입력받을 때 유용
- while문은 시작부분에서 조건식을 확인하지만 do-while문은 문장을 한 번 이상 먼저 실행하고 후에 조건식을 확인한다. 이때 조건식이 참이면 계속 블럭을 실행하고 거짓이면 while문 빠져나옴
더보기
❓ 사용자가 값을 입력하면 컴퓨터가 랜덤으로 작성한 숫자와 같으면 '정답입니다.'
사용자가 입력한 값이 컴퓨터값보다 작으면 '더 큰 수를 입력하세요'
사용자가 입력한 값이 컴퓨터값보다 크면 '더 작은 수를 입력하세요' 라는 메시지 출력
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int input = 0, number = 0;
number = (int) (Math.random() * 100) + 1; // 1~100사이 숫자 랜덤 뽑기
do { // 조건식이 참일 때 수행될 문장들(처음 한 번은 무조건 실행)
System.out.println("1과 100 사이의 숫자를 입력>>");
input = scan.nextInt();
if (input > number) {
System.out.println("더 작은 수를 입력하세요.");
} else if (input < number) {
System.out.println("더 큰 수를 입력하세요.");
}
} while (input != number); // input!=number(조건)이 true -> do 계속 반복
System.out.println("정답: " + number);
System.out.println("정답입니다."); // input==number라면(false) do-while문 빠져나옴
}
break문
- if문의 { }를 제외한 자신과 가장 가까이 있는 반복문{ }를 벗어난다.
- break문 아래쪽 문장은 실행하지 않고 while문을 완전히 벗어난다.
continue문
- 반복 진행 중에 continue문을 만나면 블럭의 끝으로 이동해 다음 반복으로 넘어간다.
→ for문에서는 증감식 부분으로 while 문에서는 조건식으로 이동 - continue문 아래쪽 문장들은 실행X
- break문과 달리 반복문을 벗어나지 않음
더보기

public class ContinueWhile {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("1. square");
System.out.println("2. square root");
System.out.println("3. log");
System.out.println("원하는 메뉴(1~3)을 선택하세요. (종료 : 0)");
String tmp = scan.nextLine();
int menu = Integer.parseInt(tmp);
if (menu == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (!(1 <= menu && menu <= 3)) {
System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)");
continue;
}
System.out.println("선택하신 메뉴는 " + menu + " 번입니다.");
}
}
}


더보기

public class ContinueWhile {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println(">>주문 코드를 입력\n" + "1.커피 2.홍차 3.라떼 4.콜라 0.주문종료");
int orderCode = scan.nextInt();
String order = "";
if (orderCode == 1) {
order = "커피";
} else if (orderCode == 2) {
order = "홍차";
} else if (orderCode == 3) {
order = "라떼";
} else if (orderCode == 4) {
order = "콜라";
} else if (orderCode == 0) {
System.out.println("주문종료");
break;
} else {
System.out.println("주문 번호가 맞지 않습니다. 다시 주문하세요");
System.out.println();
continue;
}
System.out.println(order + " 주문하셨습니다.");
System.out.println();
}
}
}
