특정한 조건에 따라 실행시키는 문법.
사용
if(조건식) { 수행문; // 조건식이 true인 경우 실행 } else { 수행문2; // 조건식이 false인 경우 실행 }
else는 사용하지 않아도 무관.
들여쓰기에 주의.
수행문이 한 행일 경우 중괄호{}
생략가능.
public class IfElseTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if(age >= 8) {
System.out.println("학교에 다닙니다.");
} else {
System.out.println("학교에 다니지 않습니다.");
}
System.out.println("노는게 제일 좋아");
}
}
if-else if-else문을 이용해 하나의 상황이 여러가지 조건일 때에 따라 각각의 수행이 가능함.
중간에 하나의 조건이라도 맞으면 해당 조건에 대한 수행문이 실행됨.
else절을 이용해 모든 조건에 해당되지 않을 경우의 수행문을 지정할 수 있음.
=> else절을 지정하지 않으면 기본값이 없어 에러가 발생할 수 있음.
사용
if(조건식1) { 수행문; // 조건식1이 true인 경우 실행 } else if(조건식2) { 수행문2; // 조건식2가 true인 경우 실행 } else if(조건식3) { 수행문2; // 조건식2가 true인 경우 실행 } else { 수행문 4; // 위의 모든 조건이 false인 경우 실행 }
if-else if문을 사용하지 않고 if문을 따로 사용할 경우 서로 배타적인 조건비교로직이 성립되지 않고 모든 조건절이 따로 수행됨.
아래의 두 예제를 참고.
if-else if문을 사용할 경우
public class IfElseIfTest {
public static void main(String[] args) {
int age = 12;
int charge;
if (age < 8) {
charge = 1000;
System.out.println("미취학 아동입니다.");
} else if (age < 14) {
charge = 1500;
System.out.println("초등학생 입니다.");
} else if (age < 20) {
charge = 2500;
System.out.println("청소년 입니다.");
} else {
charge = 3500;
System.out.println("성인 입니다.");
}
System.out.println("입장료는 " + charge + "원 입니다.");
}
}
단순 if문을 사용할 경우
public class IfElseIfTest {
public static void main(String[] args) {
int age = 12;
int charge;
if (age < 8) {
charge = 1000;
System.out.println("미취학 아동입니다.");
}
if (age < 14) {
charge = 1500;
System.out.println("초등학생 입니다.");
}
if (age < 20) {
charge = 2500;
System.out.println("청소년 입니다.");
} else {
charge = 3500;
System.out.println("성인 입니다.");
}
System.out.println("입장료는 " + charge + "원 입니다.");
}
}
여러개의 조건일때 if-else문보다 조건문을 간결하게 표현할 수 있음.
단일한 문자열이나 특정 값으로 조건이 표현될 경우 사용가능.
default
는 위의 모든 값에 해당하지 않을 경우 실행되는 구문.(else
와 유사)
반드시 break
문을 사용하여 해당 실행문을 멈춰줘야 함. 미사용 시 아래의 실행문까지 계속 실행됨.
case문 안에서는 중괄호{}
를 사용하지 않음.
문장이 많더라도 세미콜론;
을 사용하여 계속 기술.
같은 실행문이 실행되어야 할 경우 case문을 연달아 기술해도 무관.(아래 예시참고.)
참고 import 단축키 ctrl
+ shift
+ o
public class SwitchCaseTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month = scanner.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;
default:
System.out.println("존재하지 않는 월입니다.");
day = -1;
break;
}
System.out.println(month + "월은 " + day + "일 입니다.");
}
}
public class SwitchCaseUpTest {
public static void main(String[] args) {
int month = 3;
int day = switch (month) {
case 1, 3, 5, 7, 8, 10,12 -> {
System.out.println("한 달은 31일입니다.");
yield 31;
}
case 4,6,9,11 -> {
System.out.println("한 달은 30일입니다.");
yield 30;
}
case 2 ->{
System.out.println("한 달은 28일입니다.");
yield 28;
}
default->{
System.out.println("존재하지 않는 달 입니다.");
yield 0;
}
};
System.out.println(month + "월은 " + day + "일입니다.");
}
}
break문을 사용하지 않으며, 값을 반환받을 수 있다는 점이 특징.
yield
키워드를 사용하여 값을 반환한다.
switch문이 완전히 종료되는 부분에 세미콜론;
이 필요.
*현재 내가 사용중인 java버전은 11이라 직접 실행시켜보지는 않았음.
조건이 참(true)인 동안 계속 반복수행.
조건이 false가 되는 순간 반복문을 탈출함.
사용
while(조건식) { 수행문; // 조건이 true인 동안 반복수행 }
조건식은 하나의 변수일 수도 있다.
수행문이 한 행일 경우 중괄호{} 생략가능.
public class WhileTest {
public static void main(String[] args) {
int num = 1;
int sum = 0;;
while(num <= 10) {
sum += num; // 지역변수의 경우 자동으로 초기화되지 않으므로 반드시 초기화가 필요.
num++;
}
System.out.println("sum= " + sum + ", num= " + num);
}
}
주의! 지역변수는 자동초기화가 적용되지 않으므로 반드시 초기화과정을 거쳐야 함
조건을 체크하기 전 수행문을 맨 처음 한 번 먼저 실행한 후 다시 조건을 체크하여 수행.
무조건 한 번 실행이 필요할 경우 사용됨.
사용
do { 수행문1; } while(조건식) { 수행문2; }
1.일반 while문 사용
Scanner scanner = new Scanner(System.in);
int input;
int sum = 0;
input = scanner.nextInt();
while (input != 0) {
sum += input;
input = scanner.nextInt();
}
System.out.println(sum);
2.do while문 사용
Scanner scanner = new Scanner(System.in);
int input;
int sum = 0;
do {
input = scanner.nextInt();
sum += input;
} while (input != 0);
System.out.println(sum);
위의 1, 2번의 경우 do while
을 사용한 2번이 조금 더 보기 좋음.
가장 사용빈도가 높은 반복문.
각 문장은 독립된 문장이므로 세미콜론;
빼먹지 않도록 주의.
while문보다 가독성면에서 유리함.
배열과 같이 사용하기 좋음.
사용
for (초기화식; 조건식; 증감식) { 수행문; }
수행순서: 초기화식
> 조건식
> 수행문
> 증감식
단, 초기화는 최초 1번만 수행함.
보통 0에서 시작해 n미만의 조건으로 생성함.
(=>1부터 n이하까지 같은 조건도 사용가능하나 통상적으로 잘 사용하지 않음.)
public class ForTest {
public static void main(String[] args) {
// for문을 사용했을 때
int count = 1;
int sum = 0;
for (int i = 0; i < 10; i++, count++) {
sum += count;
}
System.out.println("sum = " + sum);
// while문을 사용했을 때
int num = 1;
int total = 0;
while (num <= 10) {
total += num;
num++;
}
System.out.println("total = " + total);
}
}
참고
참고로 i++는 i의 값이 변화하는 식.
i+1은 대입연산자를 통해 다시 i에 대입을 해야 i의 값이 변화함.
반복문이 중첩될 수록 수행속도가 느려지니 주의.
public class NestedLoopTest {
public static void main(String[] args) {
// for문을 이용한 구구단
int dan = 2;
int count = 1;
for( dan = 2; dan <= 9; dan++) {
for(count = 1; count <=9; count++) {
System.out.println( dan + "X" + count + "=" + dan * count);
}
System.out.println();
}
// while문을 이용한 구구단
dan = 2;
while( dan <= 9 ) {
count = 1;
while (count <= 9) {
System.out.println( dan + "X" + count + "=" + dan * count);
count++;
}
dan++;
System.out.println();
}
}
}
출력은 ixj=n 의 형태인 2~9단의 구구단이므로 나머지 생략
while문을 이용할 경우 초기화를 직접 해줘야한다는 점에 유의한다.
감싸고 있는 가장 가까운 제어문 하나의 블럭을 탈출함.
// 1부터 숫자를 더하여 100이 넘는 순간의 그 숫자와 합을 출력하시오
public class BreakTest {
public static void main(String[] args) {
int sum = 0;
int num;
for (num = 1; ; num++) {
sum += num;
if (sum >= 100)
break;
}
System.out.println("sum = " + sum);
System.out.println("num = " + num);
}
}
특정한 조건에 해당할 경우 다음 반복으로 넘어감.
// 1부터 100까지 숫자 중 3의 배수를 출력하시오
public class CountinueTest {
public static void main(String[] args) {
int num;
for( num = 1; num <= 100; num++) {
if( (num % 3) != 0) continue;
System.out.println(num);
}
}
}