STUDY/JAVA

[Java] 이것이 자바다 Ch.04

Eunjng 2023. 12. 27. 22:03

'이것이 자바다' 교재 및 강의를 참고하여 정리한 내용입니다.

Ch.04 조건문과 반복문

if 문

  • 중괄호 {} 블록 내 실행문이 하나라면 중괄호 생략 가능
  • Math.random() -> 0.0 이상 1.0 미만의 double 타입 난수를 리턴
    • start부터 시작하는 n개의 정수 중 하나의 정수를 얻기 위한 코드
    • int num = (int) (Math.random() * n) + start;

switch 문

switch(변수) {
    case 값1:

        break;
    case 값2:
    case 값3:

        break;
    default:

}

// Java 12 이후부터 switch 문에서 표현식 사용 가능
switch(grade) {
    case 값1, 값2 -> {
        실행문
    }
    case 값3, 값4 -> 실행문
    default -> 실행문
}

// switch Experssions 사용 시 스위치된 값을 변수에 바로 대입 가능
    // - 단일 값일 경우 화살표 오른쪽에 값 기술
    // - 중괄호 사용 시 yield 키워드로 값 지정 (Java 13부터 가능)
String grade = "B";

int score1 = switch(grade) {
    case "A" -> 100;
    case "B" -> {
        int result = 100 - 20;
        yield result;
    }
    default -> 60;
}

// Java 11 이전
int score2 = 0;
switch(grade) {
    case "A":
        score2 = 100;
        break;
    case "B":
        int result = 100 - 20;
        score2 = result;
        break;
    default:
        score2 = 60;
}
  • break가 없다면 case 값과는 상관없이 다음 case가 연달아 실행

for 문

  • for (초기화식; 조건식; 증감식;) { }
  • for (int i=0, j=100; i<=50 && j>=50; i++, j--) { }
  • 초기화식에서 선언된 변수는 for문 블록 안에서만 사용되는 로컬 변수
  • 초기화식에서 부동 소수점을 쓰는 float 타입 사용 시 정확하게 표현하지 못하기 때문에 사용X

while 문

  • while (조건식) { }

do-while 문

  • while: 시작할 때부터 조건식을 평가하여 블록 내부를 실행할지 결정
  • do-while: 블록 내부를 먼저 실행시킨 후, 실행 결과에 따라 반복 실행을 계속할지 결정

// 입력 값이 q면 종료
do {
    inputString = scanner.nextLine();
} while (!inputString.equals("q"));

break 문

  • for, while, do-while, switch 문 종료 시 사용
  • 중첩 반복문에서 바깥쪽 반복문까지 종료하려면 바깥쪽 반복문에 레이블을 붙이고 break 레이블; 사용
Label: for (...) {
    for(...) {
        break Label;
    }
}

continue 문

  • 반복문인 for, while, do-while 문에서 사용
  • for문의 증감식, while/do-while 문의 조건식으로 바로 이동

확인문제

// 4. while 문과 Math.random() 메소드를 이용해 
// 두 개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 
// 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5면 실행 멈추기

while(true) {
    int n1 = (int) Math.random() * 6 + 1;
    int n2 = (int) Math.random() * 6 + 1;
    System.out.println("(" + n1, + ", " + n2 + ")");
    if(n1 + n2 == 5) break;
}


// 5. 중첩 for 문을 이용해 방정식 4x + 5y = 60의 모든 해 구하기
for(x=1; x<=10; x++) {
    for(y=1; y<=10; y++) {
        if((4*x + 5*y) == 60) {
            System.out.println("(" + x + ", " + y + ")");
        }
    }
}


// 6. 별찍기
for(int i=1; i<=5; i++) {
    for(int j=1; j<=i; j++) {
        System.out.print("*");
    }
    System.out.println();
}


// 7
Scanner sc = new Scanner(System.in);
int balance = 0;
boolean flag = true;

while(flag) {
    System.out.println("-------------------------------------");
    System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
    System.out.println("-------------------------------------");
    System.out.print("선택> ");

    int n = Integer.parseInt(sc.nextLine());

    switch(n) {
      case 1:
        System.out.print("예금액>");
        balance += Integer.parseInt(sc.nextLine());
        break;
      case 2:
          System.out.print("출금액>");
        balance -= Integer.parseInt(sc.nextLine());
        break;
      case 3:
        System.out.println("잔고>" + balance);
        break;
      case 4:
          flag = false;
        break;
    }

    System.out.println();
}
System.out.println("프로그램 종료");