프로그램의 흐름(flow)을 바꾸는 역할
if, if-else if, if-else, 중첩if
단 하나의 조건식으로 많은 경우의 수를 처리가능.
default 지정 가능.
break; 까먹지 말자.
public class Ex6 {
//swtich문으로 현재 월을 입력받아, 3~5는 봄, 6~8은 여름, 9~11은 가을, 12~2는 겨울을 출력
public static void main(String[] args) {
//1. 스캐너로 현재 월을 입력받음.
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
//2. switch문으로 작업 후 출력
switch(month) {
case 3: case 4: case 5:
System.out.println("봄");
break;
case 6: case 7: case 8:
System.out.println("여름");
break;
case 9: case 10: case 11:
System.out.println("가을");
break;
default:
System.out.println("겨울");
}
}
}
public class Ex7 {
public static void main(String[] args) {
//컴퓨터와 가위바위보를 하는 게임
//1(가위), 2(바위), 3(보) 중 하나를 입력받고,
//컴퓨터는 1~3 중 임의의 수를 선택.
//그림 또는 숫자로 무승부, 나의 승, 컴퓨터 승의 경우를 확인.
//두 수를 빼서 0은 무승부, 1, -2, 나의 승, -1, 2는 컴퓨터 승을 출력
//1. 1 ~ 3 정수를 입력
Scanner sc = new Scanner(System.in);
int myNum = sc.nextInt();
//2. 컴퓨터 1 ~ 3 정수를 선택
int comNum = (int)(Math.random()*3)+1;
//3. 나, 컴퓨터의 숫자를 출력
System.out.println("myNum = " + myNum);
System.out.println("comNum = " + comNum);
//4. 결과 계산 후 출력
switch(myNum - comNum) {
case 0:
System.out.println("무승부");
break;
case 1: case -2:
System.out.println("나의 승");
break;
default: //case -1: case 2:
System.out.println("컴퓨터 승");
break;
}
}
}
for, while, do-while
for(초기화; 조건식; 증감식) {
//조건식 true면 수행될 문장
}
public class Ex14 {
public static void main(String[] args) {
//초기값 2개, 증감식 2개
//1.
for (int i = 1, j = 10; i <= 10; i++, j--) {
System.out.println(i+" "+j);
}
//2.
for (int i = 1, j = 10; i <= 10; i++) {
System.out.println(i+" "+(j-i+1));
}
}
}
public class Ex16 {
public static void main(String[] args) {
//5x10 별찍기
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
public class Ex17 {
public static void main(String[] args) {
//num을 입력받아서, 위에서부터 1,2,3...9,num 별찍기
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
public class Ex18 {
public static void main(String[] args) {
//구구단 출력
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i+" * "+j+" = "+ (i*j));
}
}
}
}
for(타입 변수명 : 배열 또는 컬렉션) {
//반복할 문장
}
for문과 항상 서로 변환 가능.
초기화, 증감식이 필요없으면 while문이 더 간결.
조건식 생략 불가
while(조건식) {
//조건식 true인 동안, 반복될 문장
}
public class Ex26 {
public static void main(String[] args) {
//1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰수가 되는가?
int i = 0;
int sum = 0;
while ((sum += ++i) <= 100) {
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
}
}
{ } 블럭을 먼저 수행 후에 조건식을 평가.
최소한 한번은 { }블럭이 수행.
반복적으로 사용자의 입력을 받아서 처리할 때 유용.
do {
//조건식이 참일 때 수행될 문장
} while(조건식);
public class Ex29 {
public static void main(String[] args) {
//1~100까지 3,6,9게임 만들기
//십의자리, 일의자리수에 3,6,9가 있는지 각각 비교
for (int i = 1; i <= 100; i++) {
System.out.printf("i=%d ", i);
//i는 for문 제어에 사용되는 변수이기 때문에
//tmp에 저장해서 처리.
int tmp = i;
do {
//tmp%10(1의자리수)이 3의 배수인지 확인
//tmp%10이 0이면 tmp%10%3은 무조건 0이 되므로,
//tmp%10이 0인 것은 제외(10, 20, 30 ...)
if (tmp % 10 % 3 == 0 && tmp % 10 != 0)
System.out.print("짝");
} while((tmp/=10)!=0); //10의 자리가 0이 아니면 10의자리 수로 다시 반복
System.out.println();
}
}
}
switch문, 반복문에서 사용.
자신이 포함된 가장 가까운 반복문을 벗어남.
주로 if문과 함께 사용됨.
전체 반복 중에 특정 조건을 만족하는 경우 반복문을 벗어나고자 할 때 유용.
반복문 내에서만 사용 가능.
반복문 진행 중 continue문을 만나면,
반복문의 끝으로 이동하여 다음 반복문으로 넘어감.
그리고 다음 반복문을 계속 수행.
주로 if와 함께 사용.
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용.
break문은 근접한 단 하나의 반복문만 벗어날 수 있음.
때문에 여러 개의 반복문이 중첩된 경우는
중첩 반복문 앞에 이름을 붙이고 break, continue문에 이름을 지정해서,
하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있음.