Java 문법 2주차 2-6,7,8 if, switch, for (조건문, 반복문)
2-6
조건문 :
특정 조건에 따라 다른 연산을 수행하고 싶을 때 조건문
물이 끓으면 강불에서 약불로 줄여주세요 - if, switch
- 물이 끓으면(조건) -> 약불로 줄여줘(연산 수행)
반복문 :
특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을 때 반복문
하얗게 색이 변하기 전까지 계속 저어주세요 - for
- 하얗게 색이 변하기 전까지(조건) -> 계속 저어주세요(반복해서 연산수행)
조건문
package week02;
public class W11 {
public static void main(String[] args) {
boolean flag = true;
// if () {} // if문의 주 골격!
if (flag) {
// true인 경우
System.out.println("값이 true입니다.");
} else {
// false인 경우
System.out.println("값이 false입니다.");
}
}
}
else if 는 확장이 가능하다.
package week02;
public class W11 {
public static void main(String[] args) {
// 조건문
int number = 2;
if (number == 1) {
System.out.println("number값은 1입니다.");
} else if (number == 2) {
System.out.println("number값은 2입니다."); // 변수 number을 2로 선언했기 때문에 출력
} else {
System.out.println("number값은 모르는 값입니다.");
}
}
}
중첩 if 문
package week02;
public class W12 {
public static void main(String[] args) {
// 중첩 if문
boolean flag = true;
int number = 2;
if (flag) {
System.out.println("flag가 true입니다.");
if (number == 1) {
} else if (number == 2) {
System.out.println("flag값은 true고, number값은 2입니다."); // flag값은 true, number는 2임으로 출력
} else {
System.out.println("flag값은 true고, number값은 모르겠습니다.");
}
} else {
if (number == 1) {
System.out.println("flag가 false이고, number값은 1입니다.");
} else if (number == 2) {
System.out.println("flag값은 false이고, number값은 2입니다.");
} else {
System.out.println("flag값은 false이고, number값은 모르겠습니다.");
}
}
}
}
중첩 if문 응용 - 가위바위보 만들기
package week02;
import java.util.Objects;
import java.util.Scanner;
public class W13 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// A에게 값 입력받기
System.out.println("A 입력 : ");
String aHand = sc.nextLine();
// B에게 값 입력받기
System.out.println("B 입력 : ");
String bHand = sc.nextLine();
// 두 개의 값을 비교하는 메서드 -> Objects.equals(좌, 우) : 좌 우가 같은 경우 true, 다른 경우 false
if (Objects.equals(aHand, "가위")) { // aHand에 가위 를 입력했을때
if (Objects.equals(bHand, "가위")) { // bHand에 가위 를 입력했을때
System.out.println("A와 B는 비겼습니다.");
} else if (Objects.equals(bHand, "바위")) { // '' 바위를 입력했을때
System.out.println("B가 이겼습니다.");
} else if (Objects.equals(bHand, "보")) { // '' 보를 입력했을때
System.out.println("A가 이겼습니다.");
} else {
System.out.println("B가 이상한 값을 입력했습니다."); // B가 가위, 바위, 보 가 아닌 다른걸 입력했을때
}
} else if (Objects.equals(aHand, "바위")) {
if (Objects.equals(bHand, "가위")) {
System.out.println("A가 이겼습니다.");
} else if (Objects.equals(bHand, "바위")) {
System.out.println("A와 B는 비겼습니다.");
} else if (Objects.equals(bHand, "보")) {
System.out.println("B가 이겼습니다.");
} else {
System.out.println("B가 이상한 값을 입력했습니다.");
}
} else if (Objects.equals(aHand, "보")) {
if (Objects.equals(bHand, "가위")) {
System.out.println("B가 이겼습니다.");
} else if (Objects.equals(bHand, "바위")) {
System.out.println("A가 이겼습니다.");
} else if (Objects.equals(bHand, "보")) {
System.out.println("A와 B는 비겼습니다.");
} else {
System.out.println("B가 이상한 값을 입력했습니다.");
}
} else {
System.out.println("A가 이상한 값을 입력했습니다."); // A가 가위, 바위, 보 가 아닌 다른걸 입력했을 때
}
}
}
출력
A 입력 :
가위
B 입력 :
바위
B가 이겼습니다.
-
2-7
switch(피연산자) / case(조건)
switch 문은 case 문과 함께 사용하며 if문 보다 좀더 가독성이 좋은 조건문 표현식이다.
- 형태 : switch(피연산자) { case(조건): (연산) }
- switch(피연산자)가 case(조건)을 만족하면 case : 뒤에 명시되어 있는 연산을 수행한다!
- case(조건): (연산) 은 여러개를 설정할 수 있다.
- 각 case 의 연산문 마지막에는 break; 를 꼭 넣어줘야 한다! 안그러면 밑으로 계속 흘러 switch문 블럭이 끝날 때까지 전부 실행.
switch문 중괄호 안의 제일 마지막에 default: (연산)을 명시해주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해주어야 한다.
- default : (연산)은 아무것도 만족하지 않을 때 수행하는 것이라, 없다면 생략가능
package week02;
public class W14 {
public static void main(String[] args) {
int month = 8;
String monthString = "";
// switch문
switch(month) {
// case~~~ 연산
case 1:
monthString = "1월";
break;
case 2:
monthString = "2월";
break;
case 3:
monthString = "3월";
break;
case 4:
monthString = "4월";
break;
case 5:
monthString = "5월";
break;
case 6:
monthString = "6월";
break;
case 7:
monthString = "7월";
break;
case 8:
monthString = "8월";
break;
case 9:
monthString = "9월";
break;
case 10:
monthString = "10월";
break;
case 11:
monthString = "11월";
break;
case 12:
monthString = "12월";
break;
default:
monthString = "알 수 없음";
}
System.out.println(monthString);
}
}
if문과 switch 문의 차이점
1. 복합조건
- if 문은 복합조건을 지원한다.
복합조건 : 괄호 () 안에 조건 여러개를 지정하여 조건문을 수행할 수 있다.
- switch 문은 피연산자 한개에 대한 조건만을 지원한다.
2. 코드중복
- if 문은 상대적으로 코드중복이 많다. ex) 위의 가위바위보 코드
- switch 문은 코드중복이 적다. 따라서 가독성이 좋음.
2-8
반복문 for, while, do-while
for문
- 특정 조건에 따라 연산을 반복(끊지 않을때 까지 계속=>실수하면 영원히)해서 수행하고 싶을 때 사용하는 문맥.
형태 : for(초기값; 조건문; 증가연산) {(연산)}
-> 특정 조건을 초기값과 조건문을 통해 정의 -> 반복할때마다 값을 증가 시키려면 증가연산을 정의
-> 초기값이 조건문을 만족할때까지 (연산)을 수행하면서 회차마다 증가연산을 수행한다.
package week02;
public class W15 {
public static void main(String[] args) {
// for문
// (초기값; 조건문; 증가연산)
for (int i=0; i < 4; i++) { // 초기값은 i=0; i < 4가 될때까지; i에 1씩 더해라
System.out.println(i + " 번째 출력!");
}
}
}
향상된 for문 -> 보통 배열과 같이 사용.
package week02;
public class W15 {
public static void main(String[] args) {
// 향상된 for문
// 기존 : for문 안에 3개의 표현이 들어감 -> (초기값; 조건문; 증가연산)
// 향상된 for문 : 2개로 줄여줌
int[] numbers = {3, 6, 9, 12, 15};
for (int number: numbers) {
System.out.print(number + " ");
}
}
}
위 코드를 보통 for문으로 구현한다면 아래와 같다.
package week02;
public class W15 {
public static void main(String[] args) {
int[] numbers = {3, 6, 9, 12, 15};
for (int i=0; i < numbers.length; i++) { // i < numbers.length 대신 i < 5도 같은 기능을 한다.
System.out.print(numbers[i] + " ");
}
}
}