조건식이 true일 때, 괄호{}안의 문장들을 수행한다.
if (조건식) {
//조건식이 참(true)일 때 수행될 문장들을 적는다.
}
여러 문장을 하나로 묶어주는 것
if(score > 60)
System.out.println("합격입니다."); //문장1. if문에 속한 문장
System.out.println("축하드립니다."); //문장2. if문에 속한 문장이 아님
if (조건식1) {
//조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) { //여러 개의 else if를 사용할 수 있다.
//조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
//조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { //마지막은 보통 else블럭으로 끝나며, else블럭은 생략가능하다.
//위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
//예제4-4 학점계산기
int score = 0; //학점을 저장하기 위한 변수
//초기값을 'D'로 넣으면 else문을 뺄 수 있다.
char grade = ' '; //학점을 저장하기 위한 변수, 공백으로 초기화
System.out.printf("점수를 입력하세요>");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt(); //화면을 통해 입력받는 숫자를 score에 저장
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >=70) {
grade = 'C';
} else {
grade = 'D';
}
System.out.println("당신의 학점은 "+grade+"입니다");
if (조건식1) {
//조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식2) {
//조건식1과 조건식2가 모두 true일 때 수행될 문장들
} else {
//조건식1이 true이고, 조건식2가 false일 때 수행될 문장들
}
} else {
//조건식1이 false일 때 수행되는 문장들
//예제4-5 중첩if문 예제
int score = 0;
char grade = ' ', opt = '0';
System.out.print("점수를 입력해주세요.>");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt();
System.out.printf("당신의 점수는 %d입니다.%n", score);
if (score >= 90) {
grade = 'A';
if (score >= 98) {
opt = '+';
} else if (score < 94) {
opt = '-';
}
} else if (score >=80) {
grade = 'B';
if (score >=88) {
opt = '+';
} else if (score < 84) {
opt = '-';
}
} else {
grade = 'C';
}
System.out.printf("당신의 학점은 %c%c입니다.%n",grade,opt);
처리해야 하는 경우의 수가 많을 때 유용한 조건문
switch (조건식) {
case 값1 :
//조건식의 결과가 값1과 같을 경우 수행될 문장들
//. . .
break;
case 값2 :
//조건식의 결과가 값2와 같을 경우 수행될 문장들
//...
break; //switch문을 벗어난다.
//. . .
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들.
//. . .
}
//예제 4-6 switch문의 제약조건 예제
public static void main(String[] args) {
System.out.print("현재 월을 입력하세요.>");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
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:
//case 12: case 1: case 2:
System.out.println("현재의 계절은 겨울입니다.");
}
} //main의 끝. break하면 여기로 이동.
- 조건식을 계산한다.
- 조건식의 결과와 일치하는 case문으로 이동한다.
- 이후의 문장들을 수행한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
- "switch문은 if문으로 전부 바꿀 수 있지만, if문은 switch문으로 전부 바꿀수 있는 것은 아니다."
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 상수(문자포함), 문자열만 가능하며, 중복되지 않아야 한다.(변수 불가, 실수 불가
int num, result;
final int ONE = 1;
. . .
switch(result) {
case '1' : //OK. 문자 리터럴(정수 49와 동일)
case ONE : //OK. 정수 상수
case "YES" : //OK. 문자열 리터럴. JDK1.7부터 적용
case num : //에러. 변수는 불가
case 1.0 : //에러. 실수도 불가
. . .
}
Math.random()
1. 각 변에 3을 곱한다
0.0 * 3 <= Math.random() * 3 < 1.0 * 3
0.0 <= Math.random() * 3 < 1.0 * 3
2. 각 변을 int형으로 변환한다.
(int)0.0 <= (int)(Math.random() * 3) < 1.0 * 3
0 <= (int)(Math.random() * 3) < 3
3. 각 변에 1을 더한다.
0 + 1 <= (int)(Math.random() * 3) + 1 < 3 + 1
1 <= (int)(Math.random() * 3) + 1 < 4
//예제4-7 1~6 난수 만들기
int num = 0;
//괄호{} 안의 내용을 5번 반복한다.
for(int i=0; i<5; i++) {
num = (int)(Math.random()*6)+1;
System.out.println(num);
}
조건을 만족하는 동안 블럭{}을 반복 - 반복횟수를 알 때 적합
for(int i=1; i<=5; i++) {
System.out.println("I can do it.");
//예제 4-10 for문 - 1~5 합계
int sum = 0;
for(int i=1;i<=5;i++) {
sum+=i; //sum = sum + i;
System.out.printf("1부터 %2d 까지의 합: %2d%n",i,sum);
}
}
for문 내에 또 다른 for문을 포함시킬 수 있다.
//구구단 2단~9단 중첩 for문
for(int i=1;i<=9;i++) {
for(int j=2;j<=9;j++) {
System.out.println(i+"*"+j+"="+(i*j));
}
}
//5x10 별찍기 중첩 for문
for(int i=1;i<=5;i++) {
for(int j=1;j<=10;j++) {
System.out.print("*");
}
System.out.println();
}
//예제 4-11 중첩for문 - 별찍기2
for(int i=1;i<=5;i++) {
for(int j=1;j<=i;j++) { //j의조건확인
System.out.printf("*");
}
System.out.println();
}
- 별찍기2 중첩 for문
조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때
while (조건식) {
//조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
int i=1; //초기화
while(i<=10) { //조건식
System.out.println(i);
i++; //증감식
}
//while문과 for문은 100% 서로 변경 가능
for(int i=1;i<=10;i++) {
System.out.println(i);
}
//예제 4-12 while문
int i=5; //i 선언 및 초기화
while(i--!=0) { //조건과 결과 확인 할 것
System.out.println(i);
} //결과 i가 4,3,2,1,0이 나온다.
//예제 4-13 while문2
int sum = 0;
int i = 0;
//i를 1씩 증가시켜서 sum에 계속 더해나간다.
while (sum<=100) {
System.out.printf("%d - %d%n", i, sum);
sum += ++i; //sum = sum + ++i
}
//예제 4-14 while문
int num = 0, sum = 0;
System.out.println("숫자를 입력하세요.(예:12345)>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
while(num!=0) {
//num을 10으로 나눈 나머지를 sum에 더함
sum += num%10; //sum = sum+num%10;
System.out.printf("sum=%3d num=%d%n",sum,num);
num /= 10; //num = num / 10;
}
System.out.println("각 자리수의 합:"+sum);
블럭{ }을 최소한 한 번 이상 반복 - 사용자 입력받을 때 유용
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
} while (조건식); //끝에 ';'을 잊지 않도록 주의
//[예제 4-15] do-while문 - 1~100사이 숫자 맞추기
int input = 0, answer = 0;
answer = (int)(Math.random()*100)+1;
Scanner scanner = new Scanner(System.in);
do {
System.out.println("1과 100사이의 정수를 입력하세요>");
input = scanner.nextInt();
if(input > answer) {
System.out.println("더 작은 수로 시도해보세요.");
} else if(input < answer) {
System.out.println("더 큰 수로 시도해보세요");
}
} while(input!=answer);
System.out.println("정답입니다.");
자신이 포함된 하나의 반복문을 벗어난다
//switch문, 무한반복문
//[예제 4-16] break문
int sum = 0;
int i = 0;
while(true) {
if(sum > 100)
break;
++i;
sum += i;
} // end of while
System.out.println("i="+i);
System.out.println("sum="+sum);
//[예제 4-17] continue문 - 3의 배수 제외
for(int i=0;i<=10;i++) {
if(i%3==0)
continue;
System.out.println(i);
}
//[예제 4-18] break문과 continue문
public static void main(String[] args) {
int menu = 0;
int num = 0;
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.println("원하는 메뉴(1~3)를 선택하세요.(종료:0)>");
String tmp = scanner.nextLine();
menu = Integer.parseInt(tmp);
if(menu==0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if(!(1<=menu && menu<=3)) {
System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
continue;
}
System.out.println("선택하신 메뉴는 "+menu+"번입니다.");
}
} //main의 끝
반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.
//[예제 4-19] 이름 붙은 반복문
{ Loop1 : for(int i=2;i<=9;i++) {
for(int j=1;j<=9;j++) {
if(j==5)
break Loop1;
// break;
// continue;
System.out.println(i+"*"+j+"="+i*j);
}
System.out.println();
}
}
//[예제 4-20] 계산 프로그램 만들기
public static void main(String[] args) {
int menu = 0, num = 0;
Scanner scanner = new Scanner(System.in);
outer:
while(true) {
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.println("원하는 메뉴(1~3을 선택하세요.(종료:0)>");
String tmp = scanner.nextLine();
menu = Integer.parseInt(tmp);
if(menu==0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if(!(1<=menu && menu<=3)) {
System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
continue;
}
for(;;) {
System.out.print("계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>");
tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
if(num==0)
break; //계산 종료
if(num==99)
break outer; //전체 종료
switch(menu) {
case 1:
System.out.println("result="+num*num);
break;
case 2:
System.out.println("result="+Math.sqrt(num));
break;
case 3:
System.out.println("result="+Math.log(num));
break;
}
} //for(;;)
} //while의 끝
} //main의 끝