(조건식)?(참일 경우):(거짓일 경우)
조건식 -> 논리 연산자 + 비교 연산자를 이용해 조건식을 만듬
- 참일 경우, 2번 자리에 있는 문장이 실행
- 거짓일 경우, 3번 자리에 있는 문장이 실행
import java.util.Scanner;
public class ConditionalOperator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int b = 10;
b = ++b>10 && b<12 ? b++ : --b;
// true true
// true
System.out.println(b); //7
int score = sc.nextInt();
// score가 80 이상이면 "통과", 아니면 "재수강"
String pass = score>=80?"통과":"재수강";
System.out.println(pass); //70 나오면 재수강, 90점나오면
int i1 = sc.nextInt();
int i2 = sc.nextInt();
// 두 수의 차이 (절댓값으로 출력) -> 음수일 때는 -를 떼고
int result = i1-i2>0 ? i1-i2 : i2-i1;
System.out.println(result);
//i1-i2: 5-3,->2
//i2-i1: 3-5 =>2
}
}
산술,비트,시프트 + 대입
+,-,*,/,%
&,|,~,^
>>,<<,>>>
int a = 10; a = a + 2; 👉 a += 2; // 12 a = a * 2; 👉 a *= 2; // 24 a = a & 2; 👉 a &= 2; // 2
제어문: 코드의 흐름을 제어하는 문장
조건문
: 조건(참/거짓)을 확인해서 어떤 코드를 실행할지 결정반복문
: 특정 횟수 또는 특정 조건에 따라서 코드를 반복
- 단순 if문
- if-else문
- if-else if-else문
- switch-case문
조건연산자와 비슷
if(조건식) { // 코드 }
조건식이 참이라면 코드 블럭 내부의 코드를 실행
int score = 70; String pass = "재수강"; if(score >= 80) { pass = "합격"; }
.vs 조건연산자
단순if문은 거짓일때의 코드를 별도로 정의 할 수 없다.
참일 때의 코드를 여러 줄 쓸 수 있음.
import java.util.Scanner;
public class SimpleIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력해주세요 > ");
int num = sc.nextInt();
String result = "홀수";
if(num % 2 == 0) {
result = "짝수";
}
System.out.println(result);
//조건 연산자
String result2 = num % 2 == 0 ? "짝수" : "홀수";
System.out.println(result2);
}
}
if문의 조건식이 참이면, if 블럭 내부의 코드가 실행
거짓이면, else 블럭 내부의 코드가 실행if(조건식) { // 코드 } else { // 코드 }
.vs 단순if문
거짓일 때의 코드를 정의할 수 있다
.vs 조건연산자
참과 거짓 모두 여러 줄의 코드를 작성할 수 있다
import java.util.Scanner;
public class IfElse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("연도를 입력해주세요 (1901~2100) > ");
int year = sc.nextInt();
if(year >= 2001) {
System.out.println("21세기 입니다.");
}
else {
System.out.println("20세기 입니다.");
}
System.out.println(year >= 2001 ? "21세기" : "20세기");
}
}
- else 문 뒤에 if를 추가로 붙인다
- 여러 개의 조건을 확인할 수 있다
int a = 10;
if(a % 4 == 0) {
// 코드
}
else if(a % 4 == 1) {
// 코드
}
else if(a % 4 == 2) {
// 코드
}
else {
// 코드
}
if-else if-else문은 사이에 else if 문을 무한하게 추가할 수 있음
🔎
if-else if-else
👉 앞에서 참이 나왔다면 뒤의 조건은 확인X
🔎if-if-if
👉 앞에서 참이 나왔더라도 뒤의 조건을 확인O
내가 만들고자 하는 코드가 조건이 어떠냐에 따라서 조건식의 종류를 잘 사용하기
if(a % 3 == 0)
else if(a % 3 == 1)
else
.vs
if(a % 3 == 0)
else {
if(a % 3 == 1)
else
}
📌 공통점: 앞에서 참이 나오면 그 뒤의 코드는 안 봄
📌 차이점: if 구조의 차이
📝 ex)
import java.util.Scanner;
public class IfExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
char grade1=' ', grade2=' ', grade3=' ';
// 90~100 A, 80~89 B, 70~79 C, ~69 F
// 단순 if문
if(score >= 90 && score <= 100)
grade1 = 'A';
if(score >= 80 && score <= 89)
grade1 = 'B';
if(score >= 70 && score <= 79)
grade1 = 'C';
if(score <= 69)
grade1 = 'F';
// 중첩 if문
if(score >= 90)
grade2 = 'A';
else { // score <= 89
if(score >= 80)
grade2 = 'B';
else { // score <= 79
if(score >= 70)
grade2 = 'C';
else // score <= 69
grade2 = 'F';
}
}
// if-else if-else 문
if(score >= 90)
grade3 = 'A';
else if(score >= 80) // score <= 89
grade3 = 'B';
else if(score >= 70) // score <= 79
grade3 = 'C';
else // score <= 69
grade3 = 'F';
System.out.println(score+"점 "+grade1+" "+grade2+" "+grade3);
}
}
📝 연습문제
점수와 학년
학년
1~3 -> 60점 이상 합격, 60점 미만 불합격
4 -> 70점 이상 합격, 70점 미만 불합격
import java.util.Scanner;
public class IfExample2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
int year = sc.nextInt();
String pass = "";
//단순 if문
if(year <= 3 && score >= 60)
pass = "합격";
if(year <= 3 && score < 60)
pass = "불합격";
if(year == 4 && score >= 70)
pass = "합격";
if(year == 4 && score < 70)
pass = "불합격";
System.out.println(pass);
String pass2 = "";
// 중첩 if문 - 학년 > 점수
if(year == 4) {
if(score >= 70)
pass2 = "합격";
else
pass2 = "불합격";
}
else { // 4학년이 아닌 경우
if(score >= 60)
pass2 = "합격";
else
pass2 = "불합격";
}
System.out.println(pass2);
String pass3 = "";
// 중첩 if문 + if-else if-else - 점수 > 학년
if(score >= 70)
pass3 = "합격";
else if(score >= 60) { // score < 70
if(year == 4)
pass3 = "불합격";
else // year != 4
pass3 = "합격";
}
else // score < 60
pass3 = "불합격";
System.out.println(pass3);
}
}
변수(식)를 보고 그 변수의 값에 따라서 다른 코드가 실행
switch(식) {
case 값1:
문장;
break;
case 값2:
문장;
break;
default:
문장;
break;
}
📝 switch-case문은 if문에서 1개의 변수/계산식에 대해서 이 값이냐?
import java.util.Scanner;
public class SwitchCase {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
// 90~100 A, 80~89 B, 70~79 C, ~69 F
// score/10 -> 9, 10 A, 8 B, 7 C, 나머지 F
char grade = ' ';
switch(score/10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
default:
grade = 'F';
}
System.out.println(grade);
}
}
만약 switch-case 문 내부에서 다른 값에 대해서 같은 코드를 처리하는 경우
여러 case를 아래와 같이 붙여 쓸 수 있음case 1: case 2: // 코드 break;
case문 내부에서 break는 switch 문을 부수고 나가는 문장
-> 반드시 의도한 대로 코드를 실행하려면 case 마다 break를 써야 한다
public class SwitchCase2 {
public static void main(String[] args) {
// double d = 3.14;
// switch 안에 실수 X
// char 문자 O
char a = 'A';
switch(a) {
case 'A':
case 'B':
case 'C':
break;
}
// 정수 리터럴 byte
byte b = 1;
switch(b) {
case 0:
// case 128: -> 범위를 벗어날 수 X
break;
}
// 정수 리터럴 short
short c = 1;
switch(c) {
case 0:
// case 32768: -> 범위 X
break;
}
// 정수 리터럴 int
int d = 1;
switch(d) {
case 0:
// case 2147483648: -> 범위 X
break;
case 1+1: // 식도 됨
break;
case 0x2A: // 리터럴 됨 (42)
break;
}
// String 문자열 리터럴
String f = "사과";
switch(f) {
case "사과":
case "배":
// case '가': 문자 != 문자열
break;
}
int g = 100;
int h = 100;
switch(g) {
case 100:
// case h: -> case에 변수 X
// case h > 3:
// case h+3:
break;
}
}
}
메뉴 입력 (Scanner)
딸기 or 사과 -> 10000원
배 or 수박 -> 15000원
레몬 -> 20000원
이외 -> 0원
if문 내에서 문자열 비교할 떄 == 비교 안됨
fruit = sc.next(); if(fruit.equals("딸기")) O if(fruit == "딸기") X
switch-case
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String fruit = sc.next();
// switch-case
int price1;
switch(fruit) {
case "딸기":
case "사과":
price1 = 10000;
break;
case "배":
case "수박":
price1 = 15000;
break;
case "레몬":
price1 = 20000;
break;
default:
price1 = 0;
}
System.out.println(price1);
}
}
단순 if문
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String fruit = sc.next();
// 단순 if문
int price2 = 0;
if(fruit.equals("딸기") || fruit.equals("사과"))
price2 = 10000;
if(fruit.equals("배") || fruit.equals("수박"))
price2 = 15000;
if(fruit.equals("레몬"))
price2 = 20000;
System.out.println(price2);
}
}
if-else if-else문
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String fruit = sc.next();
// if-else if-else문
int price3 = 0;
if(fruit.equals("딸기") || fruit.equals("사과"))
price3 = 10000;
else if(fruit.equals("배") || fruit.equals("수박"))
price3 = 15000;
else if(fruit.equals("레몬"))
price3 = 20000;
else
price3 = 0;
System.out.println(price3);
}
}