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();
		}
	}
}