728x90
반응형
제어문
- 내가 선택적으로 코드를 실행할 수 있게 한다.
- 조건문 & 반복문
조건문
- 조건에 따라 수행할 문장을 선택할 수 있도록 하여 프로그래밍 순서를 제어
- 조건식에는 boolean형 데이터 타입 (true or false) 을 결과로 가지는 값, 식이 온다.
if ( boolean형 데이터 타입(true, false) ) {
실행할 코드;
}
// 범위 블록 { } 안 쪽의 코드는 if가 true 일 때만 실행되어지게 된다.
if 조건문
- if 문 은 지나칠 수도 있는 코드가 될 수 있다.
- if - else 문은 둘 중 하나의 코드 블록은 반드시 실행이 되는 코드이다.
- if - else if - else 문은 3 가지 이상의 조건 중 하나의 코드 블록은 실행이 되는 코드이다.
- else if 는 if 와 else 사이에 여러 개 작성 가능. 제한이 없다.
- if → else if → else 순서대로 조건을 확인하면서 내려온다.
- if - else if 만 존재할 수도 있다.
switch - case 조건문 (선택문)
- switch에 들어가는 변수 타입은 아무거나 가능한데, ‘값’과의 데이터 타입이 동일해야함.
- 각 case 마다 break를 두지 않으면 위에서 아래로 계속 case를 검사하게 된다. break 작성하는 것을 권장.
- 아무 case에도 만족하지 않으면 default 가 수행된다.
- default 는 있어도 되고 없어도 된다.
If1 : If - else if - else 문
public class If1 {
public static void main(String[] args) {
// if 문
int age = 5;
if (age >= 19) {
System.out.println("성인입니다.");
System.out.println("출력1");
}
// 코드 블록 내 명령어가 한 줄이라면,
// 중괄호 생략 가능 !!!
// 명령어 1줄은 조건문에 포함
if (age >= 19)
System.out.println("성인입니다.");
System.out.println("출력1");
// if - else 문
if (age >= 19) {
System.out.println("성인입니다.");
} else { // age < 19 인 경우에 else 실행
System.out.println("어린이입니다.");
}
// if - else if - else 문
if (age >= 19) { // 19세 이상
System.out.println("성인입니다.");
} else if (age > 12) { // 13~18세, 12 < age && age < 19
System.out.println("청소년입니다.");
} else { // 12세 이하
System.out.println("어린이입니다.");
}
// if - else if 문
if (age >= 19) { // 19세 이상
System.out.println("성인입니다.");
} else if (age > 12) { // 13~18세
System.out.println("청소년입니다.");
} else if (age < 5) { // 4세 이하
System.out.println("유아입니다.");
}
}
}
If2 : If Block
public class If2 {
public static void main(String[] args) {
// if block
int age = 15;
if (age >= 19) {
System.out.println("성인입니다.");
System.out.println("술집 입장.");
}
System.out.println("============");
if (age >= 19)
System.out.println("성인입니다."); // 중괄호 없어서 첫 명령어만 if 블럭 소유
System.out.println("술집 입장."); // 이 명령어는 if문 소유가 아님. 그래서 실행됨.
}
}
If 중첩
public class If3 {
public static void main(String[] args) {
// if 중첩
int age = 25;
boolean man = false;
if (age >= 19) {
if (man) {
System.out.println("성인 남성: 25000원");
} else {
System.out.println("성인 여성: 23000원");
}
} else {
System.out.println("청소년: 15000원");
}
}
}
- if 문에서 조건식에 true를 넣으면 else if 와 else 문은 절대 실행이 되지 않으므로 DEAD CODE가 된다.
Switch 코드
Switch1 : Switch - case 문
public class Switch1 {
public static void main(String[] args) {
// switch - case 문
int ranking = 2;
switch (ranking) {
case 1:
System.out.println("금메달");
break;
case 2:
System.out.println("은메달");
break;
case 3:
System.out.println("동메달");
break;
default: // default는 만들어도 되고, 안 만들어도 된다.
System.out.println("참가상");
break;
}
}
}
- Switch - case 문에서 break;가 없다면, 조건이 만족하는 case 이하로 모든 명령어가 쭉 실행됨.
- break를 만날때까지 계속 실행됨.
Switch2 : 병합처리
public class Switch2 {
public static void main(String[] args) {
// 병합 처리
int ranking = 2;
switch (ranking) {
case 1:
System.out.println("대상");
break;
case 2: case 3:
System.out.println("우수상");
break;
case 4: case 5:
System.out.println("장려상");
break;
}
int days;
int month = 6;
switch (month) {
case 2:
days = 28;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
default:
days = 31;
break;
}
System.out.println(month + "월은 " + days + "일까지 있습니다.");
}
}
- break 작성이 필수는 아니다.
Switch3 : 문자열 및 문자열 비교
public class Switch3 {
public static void main(String[] args) {
// 문자열
String country = "China";
switch (country) {
case "Korea":
System.out.println("Seoul");
break;
case "China":
System.out.println("Beijing");
break;
case "Japan":
System.out.println("Tokyo");
break;
}
// String 비교 ( == , equals( ) )
String a = "안녕";
String b = "안녕";
System.out.println( a == b ); // true
String c = new String("안녕"); // 생성자를 통해 새로운 객체를 생성
System.out.println( a == c ); // false
System.out.println( a.equals(c) ); // true
}
}
- 이전에는 switch에서의 문자열 비교가 불가능 했다. java 8 버전까지는 비교가 불가능했지만, 그 이후부터는 문자열 값에 대한 비교가 가능해졌다.
- 파일을 호출하기 위해서 가장 먼저 실행되는 main 메서드 가 호출이 되는 순간, Stack이라는 영역(공간)이 생긴다. int a = 10; 라는 코드가 있으면 기본형 데이터인 int에 따라 main 메서드 안에 a = 10 이라고 저장된다. 그런데 참조형 데이터인 String b = "안녕"; 이라는 코드가 있으면 Stack이라는 영역이 아닌 Heap 영역에 주소를 가지고 “안녕”을 저장하게 된다. 그래서 그 주소를 main 메서드(Stack) 안에 b에 주소값을 대입시킨다. 그래서 참조형 데이터(String)은 값 비교가 아닌 주소 비교를 하므로 주소값이 맞아야 맞는 값으로 인식한다. Heap 영역 안에는 문자열 상수풀 이라는 공간에 문자열을 주소와 함께 저장시킨다.
int a = 10;
String b = "안녕";
String c = "안녕";
String c = new String("안녕");
a = 10 이라는 정보는 main 메서드의 Stack 영역에 저장됨.
b 에 대입한 "안녕"은 Heap 영역의 문자열 상수풀에 저장됨.
c 에 대입한 "안녕"은 b에서 저장했던 "안녕"을 끌어다가 참조 주소값을 넣어버림
d 에 대입한 "안녕"은 생성자를 통해 새로운 객체를 만들었기 때문에
b & c와 다른 주소값을 가지고 Heap 영역의 문자열 상수풀에 저장됨.
d는 주소값이 다르기 때문에 전혀 다른 값이다.
b == c 는 treu 값이 나온다.
b == d 는 false 값이 나온다.
b와 d의 주소값이 아닌 문자열 그 자체를 비교하려면
b.equals(d) 를 사용해야하고 이 값은 true 가 나온다.
- 문자열 내용 자체 비교는 equals( ) 라는 메서드를 활용해서 비교한다.
- 주소값 비교는 == 을 사용한다.
Switch4 : Switch 문 활용
public class Switch4 {
public static void main(String[] args) {
// switch 문 활용
int score = 82;
switch (score / 10) {
case 10: case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
System.out.println("C");
break;
case 6:
System.out.println("D");
break;
default:
System.out.println("F");
break;
}
}
}
SwitchExpression
- 책은 java 8 버전 기준인데, 람다식은 이후 버전에서 사용가능하다.
- 그렇게 사용 많이 안한다.
- yield : switch 문에서 결과값을 반환시킬 때 사용. 중괄호 안에서만 사용 가능. return(반환)시킬 값 앞에 사용한다.
public class SwitchExpression {
public static void main(String[] args) {
// Switch 표현식
int ranking = 1;
String medal = switch (ranking) {
case 1 -> {
System.out.println("우승");
yield "금메달";
}
case 2 -> "은메달";
case 3 -> "동메달";
default -> "참가상";
};
System.out.println(medal + "을 수여합니다.");
}
}
- 위의 코드에서, medal 변수 안에 무조건 무언가를 대입해야하므로, default 값이 반드시 있어야한다.
If_Example01 : 사각형 넓이 구하기
import java.util.Scanner;
public class If_Example01 {
public static void main(String[] args) {
/*
* 사각형의 넓이 구하기
* 가로, 세로의 길이를 입력 받아 넓이를 구해라.
* 단, 가로와 세로의 길이를 비교하여 정사각형 or 직사각형을 출력한다.
* 출력 결과:
* 가로 입력: 5
* 세로 입력: 4
* 직사각형의 넓이는 20 입니다.
*/
Scanner sc = new Scanner(System.in);
System.out.println("가로 입력:");
int width = sc.nextInt();
System.out.println("세로 입력:");
int height = sc.nextInt();
String kindOfSquare;
if (width == height) kindOfSquare = "정사각형";
else kindOfSquare = "직사각형";
System.out.println(kindOfSquare + "의 넓이는 " + (width * height) + "입니다.");
}
}
If_Example02 : 세 개의 정수 중 가장 큰 수 출력
import java.util.Scanner;
public class If_Example02 {
public static void main(String[] args) {
/*
* 세 개의 정수를 입력받아
* If 문을 활용해 가장 큰 수를 출력한다.
* 출력 결과 :
* 숫자1: 3
* 숫자2: 1
* 숫자3: 2
* 최대값: 3
*/
Scanner sc = new Scanner(System.in);
System.out.println("숫자1 입력:");
int a = sc.nextInt();
System.out.println("숫자2 입력:");
int b = sc.nextInt();
System.out.println("숫자3 입력:");
int c = sc.nextInt();
int max = a;
if (max < b) {
max = b;
}
if (max < c) {
max = c;
}
System.out.println("최대값: " + max);
sc.close();
}
}
If_Example03 : 짝수 홀수 판별
import java.util.Scanner;
public class If_Example03 {
public static void main(String[] args) {
/*
* 정수를 1개 입력 받고 홀수 인지 짝수인지를 출력
* 출력 결과:
* 정수 입력: 4
* 짝수입니다.
*
*/
Scanner sc = new Scanner(System.in);
System.out.println("정수 입력:");
int num = sc.nextInt();
String result = "짝수";
if (num % 2 != 0) {
result = "홀수";
}
System.out.println(result + "입니다.");
}
}
If_Example04 : 수우미양가 등급 나누기
import java.util.Scanner;
public class If_Example04 {
public static void main(String[] args) {
/*
* 등급 나누기 점수 (0~100 사이의 정수) 를 입력받아 등급을 출력
* 등급은 수, 우, 미, 양, 가 로 구분
* 단, 0~100 이외의
* 숫자를 입력시 "잘못 입력했습니다" 문구 출력하고, 프로그램을 종료한다.
* System.exit(0); // 프로그램 종료시키는 메서드 출력
* 결과 :
* 점수 입력: 87
* 우
*/
Scanner sc = new Scanner(System.in);
System.out.println("점수 입력:");
int score = sc.nextInt();
char grade = '수';
// 1번
if (90 <= score && score <= 100) {
grade = '수';
} else if (80 <= score && score < 90) {
grade = '우';
} else if (70 <= score && score < 80) {
grade = '미';
} else if (60 <= score && score < 70) {
grade = '양';
} else if (0 <= score && score < 60) {
grade = '가';
} else {
System.out.println("잘못 입력했습니다.");
System.exit(0);
}
System.out.println(grade);
// 2번
if(score < 0 || score > 100) {
System.out.println("잘못 입력했습니다.");
System.exit(0);
} else if (90 <= score) {
grade = '수';
} else if (80 <= score) {
grade = '우';
} else if (70 <= score) {
grade = '미';
} else if (60 <= score) {
grade = '양';
} else {
grade = '가';
}
System.out.println(grade);
sc.close();
}
}
If_Example05 : 윤년 구하기
import java.util.Scanner;
public class If_Example05 {
public static void main(String[] args) {
/*
* 윤년 구하기
*/
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
boolean isYoonYear = false;
if(year % 4 != 0) {
isYoonYear = false;
}else if(year % 100 != 0) {
isYoonYear = true;
}else if(year % 400 == 0) {
isYoonYear = true;
}
System.out.println((isYoonYear) ? "윤년" : "평년");
}
}
728x90
반응형