자바스터디 - 4주차

megaseunghan·2022년 2월 7일
0

자바스터디

목록 보기
8/15
post-thumbnail

자바스터디 4주차

목표

  • 자바가 제공하는 제어문을 학습하세요.

학습할 것

  • 선택문
  • 반복문

제어문

자바 인터프리터는 위에서 아래로 오른쪽에서 왼쪽으로 프로그램을 읽는 제어 흐름을 가진다.

이러한 프로그램의 흐름을 변경하는 문장이 제어문이다.

제어문의 분류 및 사용 제어문

제어 구조 분류기능사용 제어문
순차 구조포함된 문장을 순서대로 실행블록{}
선택 구조어떤 조건에 따라 다음에 실행할 부분을 선택if, if-else,nested if,switch
반복 구조어떤 조건이 만족될 때까지 특정 부분을 계속 수행for, while, do-while
분기문각 분기문 별로 아래에서 설명break, continue, return

선택문

  • 선택문은 어떠한 조건을 두어 조건에 만족되는 경우에만 문장을 실행시킨다.

  • true 또는 false 값을 산출할 수 있는 연산식이나 , boolean 변수가 올 수 있다.

종류

  1. if
  • 기능 : 정해진 조건이 만족되는 경우에만 문장을 실행시킨다.
  • 형식 : if(조건식) 실행 문장;
  • 구조 :
  • 예제
package selectStatement;

public class IfExam {
    public static void main(String[] args) {
        int age = 25;
        String isAdult;

        // 0. if
        if (age == 0) {
            isAdult = "???";
            System.out.println("나이가 없으신가요..?");
        }

        // 0-1 if option
        // 만약 한 줄에 간단하게 쓸 수 있다면 중괄호 {}는 스킵해도 괜찮습니다 :D !
      	// 하지만 중괄호를 생략하지 않는 것을 추천합니다.(가독성, 버그)
        if (age == 0) System.out.println("나이가 없으신가요..?");

  1. if-else
  • 기능 : 조건에 따라 수행할 문장을 두 문장 중에서 선택
  • 형식 : if(조건식) {} else {}
  • 구조 :
  1. if-else if-else
  • 기능 : 한 조건에만 비교하지 않고, 더 많은 조건들에 의해 수행할 문장을 선택한다.
  • 용도 : 다중으로 조건을 주어야 할 때 사용
  • 구조 :
  • if-else && if-else if-else 예제
        // 1. if-else
        if (age >= 20) {
            isAdult = "YES!";
            System.out.println(isAdult + "당신은 성인이네요 !");
        } else {
            isAdult = "NO..";
            System.out.println(isAdult + "아직 성인이 아니네요!");
        }
		
				// 1-1. if-else if-else
				if (age >= 20) {
          	isAdult = "YES!";
          	System.out.println(isAdult + "당신은 성인이네요 !");
        } else if (age >= 100) {
          	isAdult = "?!?!?!?!";
						System.out.println(isAdult + "당신은 성인 그 이상이네요,,!");
        } else {
						isAdult = "NO..";
            System.out.println(isAdult + "아직 성인이 아니네요!");
        }
  1. nested if
  • 기능 : if문을 포함하고 있는 if문
  • 용도 : 이미 결정한 사항에 기초하여 또 다른 판단을 수행한다.
  • 구조 :
  • 예제
        //2. nested if
        if (age != 0) {
            System.out.println("나이는 있으시군요 ! 당신의 나이는,,");
            if (age >= 20) {
                isAdult = "YES!";
                System.out.println("당신은 " + age + "살이네요, " + 										isAdult + " 성인이군요 !");
            } else {
                isAdult = "NO..";
                System.out.println("당신은 " + age + "," + isAdult + 								"아직 성인이 아니네요");
            }
        }
  1. switch
  • 기능 : 한 타입의 값에 따라 여러 개의 경로 중에서 한 경로를 선택한다.
  • 형식 : switch(수식) { case 타입 값 : 실행 문장 ... default : 실행 문장}
  • 구조 :
import java.util.Scanner;

public class SwitchExam {

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

        int month = sc.nextInt();
        int day;

        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            case 2:
                day = 28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                day = 30;
                break;
        }
    }
}

반복문

어떤 조건이 만족될 때 까지 특정한 부분 반복적으로 수행

종류

  1. while
  • 기능 : 조건식이 true일 경우에 계속해서 반복한다. 조건식에는 비교 또는 논리 연산식이 주로 오는데, 조건식이 false가 되면 반복을 멈추고 while문을 종료한다.
  • 구조 :
  • 예제
package loopStatement;

import java.util.Scanner;

public class WhileExam {

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

        int count = 0; // 종료 시점을 계산할 변수 count

        while (count > 9) { // 카운팅이 10(0 ~ 9)보다 커질 때까지
            int A = sc.nextInt(); // 정수 A
            int B = sc.nextInt(); // 정수 B

            System.out.println(A + B); // 둘을 더한 값을 출력

            count++; // 카운트 증가
        }
    }
}
  1. do-while
  • while과 차이 : while문이 시작할 때 부터 조건식을 검사하여 블록 내부를 실행할지 결정하지만, 경우에 따라서 블록 내부의 실행문을 우선 실행시키고 실행 결과에 따라서 반복 실행을 계속할지 결정하는 경우도 발생한다. 이 때, do-while문을 사용한다.

  • 구조 :

  • 예제
package loopStatement;

import java.util.Scanner;

public class DoWhileExam {

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

        int count = 0; // 종료 시점을 계산할 변수 count

        do { // 작업을 반복 수행 할 구간
            int A = sc.nextInt(); // 정수 A
            int B = sc.nextInt(); // 정수 B

            System.out.println(A + B); // 둘을 더한 값을 출력

            count++; // 카운트 증가
        }
        while (count > 9); // 카운트가 10(0 ~ 9)보다 커질 때 까지
    }
}
  1. for
  • 기능 : 주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문.
  • 구조 :
  • 예제
public class ForExam {
  public static void main(String[] args) {
    //1부터 10까지 총합계
    int sum = 0;
    for(int = 0; i < 100; i++) {
      sum += i;
    }
    System.out.println(sum);s
  }
}
  1. 향상된 for (Java 5 이상)
  • 기능 : 여러 원소로 이루어진 집합의 모든 원소에 특정 작업을 반복하기 위해 사용한다. for문과 속도는 같다.
  • 형식 : for(원소의타입 변수명 : 원소를 포함한 배열 || 자료형)
  • 장점 :
    • 간편하고, 가독성이 높아진다.
    • ArrayIndexOutOfBounds예외를 피할 수 있다.
  • 단점 :
    • Index가 참조 되지 않는다.
    • 배열이나 ArrayList값을 사용할 수는 있지만 수정할 수 없다.
  • 예제
public class upgradeFor {
  public static void main(String[] args) {
    String[] strArr = {"hello", "hi", "bonjour", "안녕"};
    
    for(String word : strArr) {
      System.out.println(words); // strArr의 엘리먼트를 순차적으로 출력
    }
  }
}
  1. Iterator

컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 한 것.

  • Iterator 인터페이스가 가진 메서드
리턴타입메서드설명
booleanhasNext()가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.
Enext()컬렉션에서 하나의 객체를 가져온다.
voidremove()Set 컬렉션에서 객체를 제거한다.
  • 예제
package Week_4;

import java.util.*;

public class IteratorExam {

    public static void main(String[] args) {
        Set<String> stringSet = new HashSet<>();    // Set 선언

        // Set 초기화
        stringSet.add("java");
        stringSet.add("java2");
        stringSet.add("java3");
        stringSet.add("java4");
        stringSet.add("java5");
        stringSet.add("java6");

        // Set의 각 원소를 출력할 Iterator 반복자 선언 및 초기화
        Iterator<String> setIter = stringSet.iterator();

        while (setIter.hasNext()) { //다음 원소가 있을 때까지, setIter의 next()를 통해 원소를출력
            String iterNext = setIter.next();
            System.out.println(iterNext);
        }
      
      	
        Map<Integer, String> stringMap = new HashMap<>(); // Map 선언

        // Map 초기화
      	stringMap.put(1, "하나");
        stringMap.put(2, "둘");
        stringMap.put(3, "셋");
        stringMap.put(4, "넷");
        stringMap.put(5, "다섯");

      	// Map의 키를 Set 집합으로 선언 및 초기화
        Set<Integer> keySet = stringMap.keySet();
      	// 각 키를 읽는 Iterator 반복자
        Iterator<Integer> iter = keySet.iterator();

      	// 다음 원소(키)가 있을 때 까지, 원소(키)를 통해 Map의 원소(값)를 읽는다.
        while (iter.hasNext()) {
            Integer key = iter.next();
            System.out.println(stringMap.get(key));
        }
    }
}

분기문

  1. break
  • 반복문인 for문, while문, do-while문을 실행 중지할 때 사용된다.
  • switch 문에서도 break문을 사용하여 종료한다.
  • 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다.
  1. label break
  • 여러 반복문이 중첩된 상황에서 한 번에 모든 반복문을 빠져 나가거나, 특정 반복문까지만 빠져나가고 싶을 때 사용
  • 반복문 앞에 label명 : for(;;)과 같은 식으로 명시하면 된다.
  • 예제
public class labelBreak {
  public static void main(String[] args) {
    
    myLoop :
    for(int i = 0; i < 10; i++) {
      for(int j = 1; j < 10; j++) {
        if(i == 5) {
          break myLoop;
        }
        System.out.print(i + "*" + j + "=" + i*j); 
      }
      System.out.println();
    }
  }
}
  1. continue
  • 반복문 내에서 사용되며 해당 루프의 나머지 부분을 건너 뛰고, 바로 다음 조건식의 판단으로 넘어가게 한다.
  • 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 사용.

0개의 댓글