[9일차] 자바 조건문, 반복문

유태형·2022년 5월 6일
0

코드스테이츠

목록 보기
10/77

오늘의 목표

  1. 조건문
  2. 반복문



내용

조건문

if문

if문의 소괄호 안에는 boolean값으로 평가도리 수 있는 조건식을 넣어주고 중괄호 안의 실행 블록에는 조건식이 참일 때 실행하고자 하는 코드를 적어주면 됩니다.

if(조건식){
	//조건식이 참일 때
}


if...else문

순서대로 if문의 조건식이 참이면 if문을, 거짓이면 else if문의 조건식을 비교합니다. else if문의 조건식이 참이면 실행하며 거짓일 경우 다음 else if문의 조건식을 비교합니다. 모두 거짓일 경우 else문을 실행합니다.

import java.util.Scanner;

public class Main {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        String dice = myInput.nextLine();

        if(dice.equals("1번"))
            System.out.print("1");
        else if(dice.equals("2번"))
            System.out.println("2");
        else if(dice.equals("3번"))
            System.out.println("3");
        else if(dice.equals("4번"))
            System.out.println("4");
        else if(dice.equals("5번"))
            System.out.println("5");
        else if(dice.equals("6번"))
            System.out.println("6");
        else
            System.out.println("없는 숫자! " + dice);
    }
}


switch문

if문과 같이 조건 제어문이지만 true,false로 구분하는 것이 아닌 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됩니다. if문 보다 간결한 코드를 작성할 수 있습니다.

import java.util.Scanner;

public class Main {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        String dice = myInput.nextLine();

        switch(dice){
            case "1":
                System.out.println("1번");
                break;
            case "2":
                System.out.println("2번");
                break;
            case "3":
                System.out.println("3번");
                break;
            case "4":
                System.out.println("4번");
                break;
            case "5":
                System.out.println("5번");
                break;
            case "6":
                System.out.println("6번");
                break;
            default:
                System.out.println("없는 숫자! " + dice);
                break;
        }
    }
}

case 값 : : 으로 변수가 어느 값을 가졌는 지를 선택합니다.
break; : 해당 case문을 실행하고 switch문을 탈출하여 나오는 명령어입니다. 마지막에 break;이 없다면 다음 case문을 실행하게되고 원하지 않은 결과가 나올 수 있습니다.
default: : if문의 else와 비슷한 역할을 합니다. 어떤 값도 해당 되지 않을 경우 실행하게 됩니다.

import java.util.Scanner;

public class Main {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        String yourPosition = myInput.nextLine();

        switch(yourPosition){
            case "Senior" : // Senior일 경우
                System.out.println("700만원");
                break;

            case "Junior" :  //Junior 또는 Manager일 경우
            case "Manager" : //실행문이 같으면 이렇게 작성 가능
                System.out.println("500만원");
                break;
            default:
                System.out.println("300만원");
                break;
        }
    }
}

Junior를 입력해보시면 case문 마지막에 break;이 없다면 어떻게 되는지 확인 할 수 있습니다.

import java.util.Scanner;

public class Main {
    static Scanner userInput = new Scanner(System.in);

    public static void main(String[] args) {
        String[] positionList = {"Manager", "Senior", "Junior"};
        String yourPosition = userInput.nextLine(); //입력 받기

        switch (yourPosition) {
            case "Senior" -> System.out.println("700만원");
            case "Junior", "Manager" -> System.out.println("500만원");
        }
    }
}

switch문 람다식



조건문 문제

60~100점까지 D~A grade를 구분하고 1의 자리가 0~2라면 -, 8~9라면 +를 붙힙니다.

  • 10의 자리로 grade를 구분한다.
  • 1의 자리로 기호(-,+)를 구분한다.
import java.util.Scanner;

public class Main {
    public static String convertScoreToGradeWithPlusAndMinus(int score){
        String grade;
        if(score > 100 || score < 0){
            return "INVALID SCORE";
        }
        if(score == 100){
            return "A+";
        }
        if(score >= 90) {
            grade = "A";
        }else if(score >= 80) {
            grade = "B";
        }else if (score >= 70) {
            grade = "C";
        } else if (score >= 60) {
            grade = "D";
        } else {
            grade = "F";
        }

        if(!grade.equals("F")){
            int extra = score % 10;
            if(extra <= 2)
                grade = grade + "-";
            else if(extra >= 8)
                grade = grade + "+";
        }

        return grade;
    }


    public static void main(String[] args) {
        int score = 62;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 65;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 68;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 72;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 75;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 78;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 82;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 85;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 88;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 92;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 95;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 98;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
        score = 100;
        System.out.println(convertScoreToGradeWithPlusAndMinus(score));
    }
}



반복문

for문

조건식이 참인 동안 횟수만큼 반복적으로 수행합니다.

초기화 : for문이 시작할때 최초 한번만 수행되며, 변수의 초기값을 지정합니다.
조건식 : 계속 반복할지 여부를 결정합니다. for문이 1번 시작할 때 마다 true면 수행하고 false면 for문을 빠져 나옵니다.
증감식 : 반복횟수를 결정하는 규칙입니다. 변수를 어마나 더하고 빼냐에 따라 반복횟수를 조정할 수 있습니다.

for(초기화;조건식;증감식){
	//조건식이 참일 때
}

예를 들어 1부터 100까지 더하는 for문을 구현하겠습니다.

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1;i<=100;i++)
            sum += i;

        System.out.println(sum);
    }
}

//5050


향상된 for문

향상된 for문은 조건식 초기화 증감식을 사용하지 않습니다. python이나 자바스크립트와 같이 배열이나 컬렉션의 요소를 순차적으로 받아옵니다.

for(String 변수 :String[] 배열){
	//배열의 요소들을 순서대로 변수로 읽어 들입니다.
}
public class Main {
    public static void main(String[] args) {
        String[] names = {"kimcoding", "javalee", "ingikim"};
        for (String name : names)
            System.out.println(name + "님은 자바를 공부중 입니다.");
    }
}

    /*
    * kimcoding님은 자바를 공부중 입니다.
    * javalee님은 자바를 공부중 입니다.
    * ingikim님은 자바를 공부중 입니다.
    * */


while문

for문과 비슷한 기능고 ㅏ역할을 수행합니다. 하지만 구조는 다릅니다.

(초기화);
while(조건식){
	실행문; //조건식이 참인 동안 실행
    증감식;
}

초기화는 while문을 실행하기 전 한번 수행하고 증감식이 while문 마지막에 존재함으로써 유한하게 반복합니다.(증감식이 없으면 무한반복될 수 있으니 주의!)

1부터 100까지 더하는 while문

public class Main {
    public static void main(String[] args) {
        int num = 0, sum = 0;
        while(num <= 10){
            sum += num;
            num++;
        }
        System.out.println(sum);
    }
}

true나 false로 숫자 연산이 아닌 boolean으로 조건을 구분할 수도 있습니다.

boolean run = true;
  int num = 1;

    while(run){ // while(true) 조건문
      num++; //실행문
      System.out.println(num); //실행문

      if(num == 22) { //조건문, num이 22가 되면 탈출! 얏호!
        run = false;
      }
    }


do-while문

do-while문은 거의 99% while문과 동일합니다. 하지만 조건식을 비교하고 실행하는 while문과 달리, do-while문은 실행하고 조건식을 비교하므로 순서가 다릅니다. 즉 조건식이 충족되지 않는다면 while문은 한번도 실행되지 않지만 do-while문은 무조건 1번 실행하고 비교하기 때문에 최소 1번은 수행하게 됩니다.

숫자 비교 예시

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int input = 0, randomNum = 0;

        randomNum = (int)(Math.random() * 10) + 1;
        Scanner scanner = new Scanner(System.in);

        do{
            System.out.println("1과 10 사이의 정수를 입력하세요");
            input = scanner.nextInt();

            if(input > randomNum)
                System.out.println("더 작은 정수를 입력하세요");
            else if(input < randomNum)
                System.out.println("더 큰 정수를 입력하세요");

        }while(input != randomNum);
        System.out.println(randomNum +" 정답입니다!");
    }
}


break 문

for문, while문, do-while문등 실행 중에 중지하고 탈출해야할 때 사용합니다. switch문의 break;과 역할은 동일합니다.

public class Main {
    public static void main(String[] args) {
        Outer : for(int i=3;i<10;i++){
            for(int j=5;j>0;j--){
                System.out.println("i " + i + " j "+ j);
                if(i == 5)
                    break Outer;
            }
        }
    }
}
/*
i 3 j 5
i 3 j 4
i 3 j 3
i 3 j 2
i 3 j 1
i 4 j 5
i 4 j 4
i 4 j 3
i 4 j 2
i 4 j 1
i 5 j 5
*/


continue 문

continue;break;과 다르게 탈출하는 것이 아니라 이후의 실행문들으 건너 띄어 넘고 증감식, 조건식으로 되돌아가서 실행문을 처음부터 실행하는 명령어 입니다.

홀수만 출력

public class Main {
    public static void main(String[] args) {
        for (int i=0;i<10;i++){
            if (i % 2 == 0) { //나머지가 0일 경우는
                continue; //다음 반복으로 넘어간다.
            };
            System.out.println(i); //홀수만 출력
        }
    }
}



느낀점

알고 있었던 내용이지만, switch문 람다식, break Outer;등 처음 접하는 방법들도 있으니 주의해서 익혀야 겠습니다.

profile
오늘도 내일도 화이팅!

0개의 댓글