제 3장. 조건분기와 반복

41797 단어 JavaJava

A. 프로그램의 흐름

▶ 코드를 실행시키는 순서 = "제어구조"
▶ 대표적으로 "순차"(2장까지의 내용), "분기", "반복" 이 있다.

분기 정리

<if문>
1. if라는 명령어를 사용하면 "분기"를 할 수 있다.
2. if 뒤에 ()안에는 "분기조건"을 써준다.
3. 변수가 true인지 false인지 체크할때는 "=="기호를 사용한다.
4. 분기조건이 성립하면(변수 == true) {}안에 코드가 실행이 되고, 성립하지 않으면(변수 == false) else 뒤에 {}안에 코드가 실행된다.
5. if문은 "if만의 구문", "if-else 구문", "if-else-if-else 구문" 의 3종류가 있다.

<switch문>
1. switch문의 블록은 break문으로 벗어나는 것이 가능
2. 만약 if문을 사용하였는데 switch문으로 바꾸고싶으면 alt + enter 을 하여 switch 문으로 바꿔주기 항목을 선택해주면 된다.

package com.company;

public class note {
    public static void main(String[] args) {
        boolean Clear = true;
        if (Clear == true) {
            System.out.println("세탁을 합니다");
            System.out.println("산책을 합니다");
        } else {
            System.out.println("영화를 봅니다");
        }
    }
 }

▶ Java에서 if문을 빠르게 사용하기 위한 단축키는 fori + enter을 하면된다.
▶ 만약 이중 for문을 사용하고 싶으면 fori + enter + {}안에서 fori + enter을 입력하면 자동으로 변수를 i, j로 할당하게 된다.

반복문 정리(while문)

  1. while을 사용하면 "반복" 제어를 행할 수 있다.
  2. while의 뒤에는 ()안에 "반복하는 조건"을 쓴다.
  3. 반복 조건이 성립하다면 무한대로 블록 안의 코드가 반복된다.
public class note {
    public static void main(String[] args) {
        boolean isDoorClose = true;
        while (isDoorClose == true) {
            System.out.println("노크한다");
            System.out.println("1분 기다린다");
        }
    }
}

▶ Java에서는 문자열의 비교는 "=="를 사용하면 안된다.
▶ "=="는 object가 동일한지를 체크하기 때문에 object가 갖고 있는 문자열이 동일하다는 것을 보장하지 않기 때문이다.(아래 코드 비교로 자세히 설명)
▶ java에서는 equals()으로 문자열을 비교한다.

public class compare {
    public static void main(String[] args) {
        String s1 = "abcd";
        String s2 = new String("abcd");
		
        if(s1 == s2) {
            System.out.println("두개의 값이 같습니다.");
        }else {
            System.out.println("두개의 값이 같지 않습니다.");
        }
    }
}


▶ 여기에서 두개의 값이 같지 않습니다 라고 나온 이유는 java에서 "=="연산자의 경우 참조 타입 변수들 간의 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는 알아볼 때 사용된다. 이는 결국 주소 값을 비교하는 것이 되어 위의 코드에서 서로 다르다는 결론이 나온것이다. 그러기에 java에서는 equals()으로 문자열을 비교.

public class compare {
    public static void main(String[] args) {
        String s1 = "abcd";
        String s2 = new String("abcd");
		
        if(s1.equals(s2)) {
            System.out.println("두개의 값이 같습니다.");
        }else {
            System.out.println("두개의 값이 같지 않습니다.");
        }
    }
}

<TIP. 나만의 코드 단축키 만들기>

▶ java에서는 live template에서 단축키를 만들어서 사용할 수 있다.

<방법>

  1. 좌측 상단 위에서 File – setting – live templates 에 들어간다. ( ctrl+alt+s 단축키를 이용해서 setting에 들어갈 수 있다.)

  2. (+) 표시를 눌러서 Live Template를 클릭

  3. 원하는 단축키를 설정

  4. 단축키에 대한 설명작성

  5. 템플릿에는 단축키에 대한 코드를 작성(new java.util.Scanner(System.in).nextLine();)

  6. 원래는 define이라고 나와있는데 설정을 해주면 위 사진과 같이 change로 되어있다. 클릭해서 단축키를 사용할 곳을 선택해주면 되는데 나 같은 경우는 java만 선택하였다.

  7. Ok를 누르면 끝

  8. 이제 sc + enter을 쳐보면 자동으로 new Scanner(System.in).nextLine(); 이 완성되는 것을 확인 할 수 있는데 여기서 문제!

Question) sc단축키를 new java.util.Scanner(System.in).nextLine();로 설정했는데 왜 단축키를 입력했더니 new Scanner(System.in).nextLine(); 로 입력되나요?

Answer) 위와 같이 단축키를 설정을 해주면 자동으로 해당 패키지가 import 되므로 생략이된다.
중요한것은 자동 import 기능은 가능한 경우에만 수행하는데 동일한 클래스가 여러개 있다면 자동 import는 동작하지 않는다.

예제풀이

예제 3-1)

다음 문장을 Java 조건식으로 기술하시오
1. 변수 weight 의 값이 60과 같다
2. 변수 age1 과 age2 의 합계를 2배 한 것이 60을 넘는다
3. 변수 age 가 홀수다
4. 변수 name 에 저장된 문자열이 “스마트"와 같다

package com.company.quiz;

public class Quiz_3_1 {
    public static void main(String[] args) {
//        int weight = 60;
//        if(weight == 60){

//        int age1 = 40, age2 = 30;
//        if((age1+age2)*2>60){

//        int age = 15;
//        if((age % 2) == 1){

//       String name = "스마트";
//       if(name.equals("스마트")){
        System.out.println("끝!");
    }
}

예제 3-2)

/*다음 중 조건식(if문의)으로 사용 할 수 있는 것을 고르시오
        1. cost = 300 * 1.05
        2. 3
        3. age != 30
        4. true
        5. b + 5 < 20
        6. gender = true
 */

package com.company.quiz;

public class Quiz_3_2 {
    public static void main(String[] args) {
        int cost = 1000, age = 30, b = 10;
        boolean gender = true;
        //1. if(cost = 300 * 1.05) x
        //2. if(3) x
        //3. if(age != 30) o
        //4. if(true) o
        //5. if(b+5<20) o
        //6.if(gender = true) o
    }
}

예제 3-3)

/*
Java 프로그램으로 작성하시오
1. int형 변수 gender 를 선언하고, 0 또는 1을 대입한다 (어떤 것이라도
상관없음)
또한, int 형 변수 age 를 선언하고, 적당한 숫자를 대입한다.
2. 화면에 “안녕하세요” 를 표시한다
3. 만약 변수 gender 가 0이면 “나는 남자입니다", 그렇지 않으면 “나는
여자입니다" 를 표시한다
4. 만약 변수 gender 가 남자이면 age 변수의 값을 표시하고, 뒤에 “살입니다"
를 붙여서 표시한다.
5. 마지막에 “잘 부탁합니다" 를 표시한다
*/

package com.company.quiz;

public class Quiz_3_3 {
    public static void main(String[] args) {

        int gender = 0;
        int age = 27;

        System.out.println("안녕하세요");

        if(gender == 0){
            System.out.println("나는 남자입니다");
            System.out.println(age + "살입니다");
		}else
            System.out.println("나는 여자입니다");
        	System.out.println("잘 부탁합니다");
    }
}

예제 3-4)

/*
3행의 clear 가 false 일 경우 “영화를 본다"
다음에 “잔다" 를 표시하기 위해,
9행에 “잔다"를 표시하는 행을
추가하였다.
하지만 프로그램이 의도한 대로 움직이지 않았다. 어느 부분의 오류 때문에 어떤 현상이 발생하는지 생각 해
보시오.
그리고 프로그램을 수정 하시오.
*/

package com.company.quiz;

public class Quiz_3_4 {
    public static void main(String[] args) {
        boolean clear = true;
        if (clear == false) {
            System.out.println("세탁을 한다");
            System.out.println("산책을 한다");
        } else {
            System.out.println("영화를 본다");
            System.out.println("잔다");
        }
    }
}

예제 3-5)

/*
switch 문을 이용하여 다음 조건을 만족하는 프로그램을 작성하시오
1. 화면에 “[메뉴] 1:검색 2:등록 3:삭제 4:변경 >” 을 표시한다
2. 키보드로 숫자를 입력하고, 변수 selected 에 대입한다.
3. 만약 변수 selected 가 1 이면 “검색합니다", 2이면 “등록합니다", 3이면
“삭제합니다", 4이면 “변경합니다"를 표시한다
4. selected 가 1 부터 4 사이의 값이 아니라면 아무것도 하지 않는다
*/

package com.company.quiz;

import java.util.Scanner;

public class Quiz_3_5 {
    public static void main(String[] args) {
        System.out.println("+====================+");
        System.out.println("|         메뉴        |");
        System.out.println("+====================+");
        System.out.println("| 1. 검색             |");
        System.out.println("| 2. 등록             |");
        System.out.println("| 3. 삭제             |");
        System.out.println("| 4. 변경             |");
        System.out.println("+====================+");
        System.out.println("번호를 입력해주세요");
        System.out.println(">>");

        int number = new java.util.Scanner(System.in).nextInt();

        switch (number) {
            case 1 -> System.out.println("검색합니다");
            case 2 -> System.out.println("등록합니다");
            case 3 -> System.out.println("삭제합니다");
            case 4 -> System.out.println("변경합니다");
            default -> System.out.println("아무것도 하지 않는다");
        }
    }
}

예제 3-5 관련 Tip

TIP 1)

package com.company;

import java.util.Scanner;

public class note {
    public static void main(String[] args) {
           Scanner scanner = new Scanner(System.in);

           int selected = scanner.nextInt();
        }
    }

이렇게 스캐너라는 클래스를 지정해주면 편하게 scanner변수를 사용해서 코드를 간략하게 만들어 줄 수 있다.

Tip 2)

 String number = new Scanner(System.in).nextLine();
 
 case "1":
 	System.out.println("검색")

기존에 int 형으로 변수를 만들고 실행시키면 a같은 문자열을 입력했을때 오류가 나는데 String을 이용해 문자열로 변수를 만들어주고 case 옆에 1대신에 "1", "2", "3" 이런식으로 문자열로 나타내주면 a같은 문자열을 쳤을때 오류가 나지 않는다.

예제 3-6)

/*
다음 조건을 만족하는 프로그램을 작성하시오
1. 화면에 “[숫자 맞추기 게임]” 을 표시한다
2. 0 부터 9 까지의 정수 중에서 랜덤하게 수를 1개 생성해서 변수 ans 에 대입한다
3. for 문을 이용해 “5회 반복 하는 루프"를 만든다. 아래의 4. ~ 7. 은 루프 안에 기술 한다
4. 화면에 “0 ~ 9 사이의 숫자를 입력 하세요” 를 표시한다
5. 숫자를 입력해, 변수 num 에 대입한다
6. 만약 변수 num 이 변수 ans 와 같으면 “정답!” 이라고 화면에 표시하고 반복을 종료
7. 만약 변수 num 이 변수 ans 와 같지 않으면 “다릅니다"를 표시한다
8. 반복 블록의 바깥에, “게임을 종료합니다" 라고 화면에 표시한다
 */
package com.company.quiz;

import java.util.Scanner;

public class Quiz_3_6 {
    public static void main(String[] args) {
        System.out.println("+=====================+");
        System.out.println("|    숫자 맞추기 게임    |");
        System.out.println("+=====================+");

        int ans = new java.util.Random().nextInt(9);

        for (int i = 0; i < 5; i++) {
            System.out.println("0~9사이의 숫자를 입력하세요");
            int num = new Scanner(System.in).nextInt();
            if (num == ans) {
                System.out.println("정답!");
            } else
                System.out.println("다릅니다");
        }
            System.out.println("게임을 종료합니다");

    }
}

추가예제 - 구구단 만들기)

package com.company.quiz;

import java.util.Scanner;

public class gugudan {
    public static void main(String[] args) {
//        for (int i = 0; i < 10; i++) {
//            for (int j = 0; j < 10; j++) {
//                System.out.print(i*j);
//                System.out.print(" ");
//
//            }
//            System.out.println();
//        }
        for (int i = 0; i < 10; i++) {


            System.out.println("첫번째 숫자를 입력하세요 : ");
            System.out.print(">>");
            int a = new Scanner(System.in).nextInt();
            if(a>9){
                System.out.println("범위를 초과하였습니다. 숫자의 범위는 0~9입니다.");
                continue;
            }

            System.out.println("두번째 숫자를 입력하세요 : ");
            System.out.print(">>");
            int b = new Scanner(System.in).nextInt();
            if(b>9){
                System.out.println("범위를 초과하였습니다. 숫자의 범위는 0~9입니다.");
                continue;
            }

            System.out.println("두 수의 곱은 " + (a * b));
        }
    }
}

좋은 웹페이지 즐겨찾기