백기선 자바스터디 4주차
자바스터디 4주차
목표
- 자바가 제공하는 제어문을 학습하세요.
학습할 것
- 선택문
- 반복문
제어문
자바 인터프리터는 위에서 아래로 오른쪽에서 왼쪽으로 프로그램을 읽는 제어 흐름을 가진다.
이러한 프로그램의 흐름을 변경하는 문장이 제어문이다.
제어문의 분류 및 사용 제어문
제어 구조 분류 | 기능 | 사용 제어문 |
---|---|---|
순차 구조 | 포함된 문장을 순서대로 실행 | 블록{} |
선택 구조 | 어떤 조건에 따라 다음에 실행할 부분을 선택 | if , if-else ,nested if ,switch |
반복 구조 | 어떤 조건이 만족될 때까지 특정 부분을 계속 수행 | for , while , do-while |
분기문 | 각 분기문 별로 아래에서 설명 | break , continue , return |
선택문
선택문은 어떠한 조건을 두어 조건에 만족되는 경우에만 문장을 실행시킨다.
true 또는 false 값을 산출할 수 있는 연산식이나 , boolean 변수가 올 수 있다.
종류
- 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("나이가 없으신가요..?");
- if-else
- 기능 : 조건에 따라 수행할 문장을 두 문장 중에서 선택
- 형식 :
if(조건식) {} else {}
- 구조 :
- 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 + "아직 성인이 아니네요!");
}
- 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 + "아직 성인이 아니네요");
}
}
- 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;
}
}
}
반복문
어떤 조건이 만족될 때 까지 특정한 부분 반복적으로 수행
종류
- 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++; // 카운트 증가
}
}
}
- 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)보다 커질 때 까지
}
}
- 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
}
}
- 향상된 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의 엘리먼트를 순차적으로 출력
}
}
}
- Iterator
컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 한 것.
- Iterator 인터페이스가 가진 메서드
리턴타입 | 메서드 | 설명 |
---|---|---|
boolean | hasNext() | 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다. |
E | next() | 컬렉션에서 하나의 객체를 가져온다. |
void | remove() | 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));
}
}
}
분기문
- break
- 반복문인 for문, while문, do-while문을 실행 중지할 때 사용된다.
- switch 문에서도 break문을 사용하여 종료한다.
- 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다.
- 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();
}
}
}
- continue
- 반복문 내에서 사용되며 해당 루프의 나머지 부분을 건너 뛰고, 바로 다음 조건식의 판단으로 넘어가게 한다.
- 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 사용.
Author And Source
이 문제에 관하여(백기선 자바스터디 4주차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seunghan-baek/자바스터디-4주차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)