관리 메뉴

나구리의 개발공부기록

chapter4 - 조건문과 반복문 확인문제, 추가내용 / 이것이 자바다(개정판) 본문

책 공부/이것이자바다 개정판(도서)

chapter4 - 조건문과 반복문 확인문제, 추가내용 / 이것이 자바다(개정판)

소소한나구리 2024. 2. 13. 21:46

이것이 자바다 개정판(신용권, 임경균 지음) - java 8 ~ 17대응


chapter4 - 조건문과 반복문 

 

Switch문 추가내용

  • Java 12 이후부터는 Switch문에서 Expressions(표현식) 사용가능
  • break문을 없애는 대신에 화살표와 중괄호를 사용
  • Switch Expresstions 사용시 스위치된 값을 변수에 바로 대입 가능
  • 단일 값일 경우에는 화살표 오른쪽에 값을 기술
  • 중괄효를 사용할 경우에는 yield(Java 13이후부터 사용 가능) 키워드로 값을 지정, 이 경우에는 default가 반드시 존재해야함
public class SwitchValuExample {
	public static void main(String[] args) {
		String grade = "B";
		
		// Java 11 이전 문법
		int score1 = 0;
		switch(grade) {
			case "A" :
				score1 = 100;
				break;
			case "B" :
				int result = 100 - 20;
				score1 = result;
				break;
			default :
				score1 = 60;
		}
		System.out.println("score1: " + score1);
		
		// Java 12부터 가능
		int score2 = switch(grade) {
			case "A" -> 100;
			case "B" -> {
				int result = 100 - 20;
				// Java 13부터 가능
				yield result;
			}
			default -> 60;
		};
		System.out.println("score2: " + score2);
	}
}

 


Q1. 조건문과 반복문에 대해 잘못 설명한 것은 무엇입니까? - 2번

  1. if 문은 조건식의 결과에 따라 실행 흐름을 달리할 수 있다
  2. switch 문에서 사용할 있는 변수의 타입은 int, double이  있다
  3. for 문은 카운터 변수로 지정한 횟수만큼 반복시킬 사용할 있다
  4. break 문은 switch , for while 문을 종료할 사용할 있다
switch문에서 사용할 수 있는 변수의 타입은 정수타입(byte, short, int, long, char)과 문자열(String)타입

 

Q2. switch문을 Expression(표현식)으로 변경해서 코드를 작성

String grade = "B";

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

-----------------------------------
(자바12 부터)
int score1 = switch(grade) {
case "A" -> 100;
case "B" { // 중괄호를 사용할 경우 yield로 값을 지정(Java13 부터)
  int result = 100 - 20;
  yield result;
  }
default score1 -> 60;
};

 

Q3. for문을 이용해서 1부터 100까지의 정수 중에서 3의 배수의 총합을 출력하는 코드를 작성

// i를 3씩 증가시켜서 sum에 3의 배수의 값을 누적 연산하도록 작성
int sum1 = 0;

for(int i = 0; i < 100; i+=3 ) {
    sum1 += i;
}
System.out.println(sum1);

// i를 1씩 증가시킨 후 if문을 사용하여 3으로 나누기한 나머지가 0일때(3의 배수의 값을 선별) 누적 연산 하도록 작성
int sum2 = 0;
for(int i = 0; i < 100; i++ ) {
    if(i % 3 ==0) {
        sum2 += i;
    }
}
System.out.println(sum2);

 

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

(눈의 합이 5가 되는 경우는 (1,4), (4,1), (2,3), (3,2))

while(true) {
    // 각 변수에 1 ~ 6 사이의 값이 랜덤값으로 초기화되도록 선언
    int score1 = (int)(Math.random()*6)+1;
    int score2 = (int)(Math.random()*6)+1;

    int result = score1 + score2;
    System.out.println("("+score1+", "+score2+")");
    // 변수 result의 값이면 멈추도록 설정
    if(result == 5) { // 변수 선언 없이 (score1 + score == 5)로 조건문을 해도 됨
        break;
    }
}

 

Q5. 중첩 for문을 이용하여 방정식 4x + 5y = 60의 모든 해를 구해서 (x,y) 형태로 출력하는 코드를 작성

(단, x와 y는 10 이하의 자연수)

// x의 값을 1부터 10까지 1씩 증가
for(int x = 1; x <= 10; x++ ) {
    // y의 값을 1부터 10까지 1씩 증가
    for(int y = 1; y <= 10; y++) {
        // 아래의 조건식이 맞으면 x,y의 값을 출력
        if(4 * x + 5 * y == 60) {
            System.out.println("("+x+", "+y+")");					
        }
    }
}

 

Q6. for 문을 이용해서 다음과 같은 실행 결과가 나오는 코드를 작성

*
**
***
****
*****

--------------------
// i를 5까지 1씩 증가시켜 엔터(줄건너뛰기)를 5번 시행
for(int i = 1; i <= 5; i++ ) {
    // j를 i의 횟수만큼 1씩 증가시킨 값 만큼 *을 출력
    for(int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

 

Q7. while 문과 Scanner의 nextLine() 메소드를 이용해서 다음 실행 결과와 같이 키보드로부터 입력된 데이터로 예금, 출금, 조회, 종료 기능을 제공하는 코드를 작성

// Scanner클래스를 생성하여 커맨드라인으로 입력값을 받음
Scanner scanner = new Scanner(System.in);

int balance = 0;

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

    String choice = scanner.nextLine();

    if(choice.equals("1")) {
        System.out.print("예금액 > ");
        balance += Integer.parseInt(scanner.nextLine());
    } else if(choice.equals("2")) {
        System.out.print("출금액 > ");
        balance -= Integer.parseInt(scanner.nextLine());
    } else if(choice.equals("3")) {
        System.out.println("잔액 > "+balance);
    } else if(choice.equals("4")) {
        break;
    }
}
System.out.println("프로그램 종료");
---------------------------------------------
// switch문으로도 가능
Scanner scanner = new Scanner(System.in);

int balance = 0;
boolean run = true; // while 작동하는 장치

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

    String choice = scanner.nextLine();
    // 각 case의 문자열과 choice의 값이 맞으면 문장들을 실행
    switch(choice) {
        case "1" :
            System.out.print("예금액> ");
            balance += Integer.parseInt(scanner.nextLine());
            break;

        case "2" :
            System.out.print("출금액> ");
            balance -= Integer.parseInt(scanner.nextLine());
            break;

        case "3" :
            System.out.println("잔고> " + balance);
            break;

        case "4" :
            System.out.println("프로그램 종료");
            run = false; // run의 값을 false로 변경시켜서 while문을 종료
            break;
    }
}