⦁ 조건문 : 조건을 만족할때만 { }를 수행 (0~1번)
조건문에는 if문과 switch문이 있음.
⦁ 반복문 : 조건을 만족하는 동안 { }를 수행 (0~n번)
⦁ 블록 { } : 여러 문장을 하나로 묶어주는 것
⦁ if-else문 : 둘 중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
형식은 다음과 같다.
if (input==0) {
System.out.println("0입니다.");
} else {
System.out.println("0이 아닙니다.");
}
⦁ if-else if문 : 여러개 중의 하나 – 여러개의 조건식을 포함한 조건식
형식은 다음과 같다.
if (조건식1) {
/* 내용 */
} else if (조건식2) {
/* 내용 */
} else if (조건식3) {
/* 내용 */
} else {
/* 내용 */
}
조건식을 만족하게 되면 바로 조건문을 나오게 된다.
마지막은 보통 else 블록으로 끝나며, else 블록은 생략가능하다.
ex)
import java.util.Scanner;
public class Ex4_4 {
public static void main(String[] args) {
int score = 0; // 점수를 저장하기 위한 변수
char grade = ' '; // 학점을 저장하기 위한 변수, 공백으로 초기화한다.
System.out.println("점수를 입력하세요.");
Scanner sc = new Scanner(System.in);
score = sc.nextInt();
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문 – if문 안의 if
형식은 다음과 같다.
if (조건식1) {
if (조건식2) {
/* 내용 */
} else {
/* 내용 */
}
} else {
/* 내용 */
}
import java.util.Scanner;
public class Ex4_5 {
public static void main(String[] args) {
int score = 0;
char grade = 'D';
char opt = ' ';
System.out.println("점수를 입력하세요.");
Scanner sc = new Scanner(System.in);
score = sc.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 if (score >= 70) {
grade = 'C';
if (score >= 78) {
opt = '+';
} else if (score < 74) {
opt = '-';
}
}
System.out.println("당신의 학점은 " + grade + opt + "입니다.");
}
}
if문 안에 if문을 넣어서 점수를 더 세분화 했다.
이번에는 if문의 가장 마지막에서 else를 생략하면서 grade의 초기값에 D를 넣어주었다.
⦁ switch문
처리해야 하는 경우의 수가 많을 때 유용한 조건문
1) 조건식을 계산한다.
2) 조건식의 결과와 일치하는 case문으로 이동한다.
3) 이후의 문장들을 수행한다.
4) break문이나 switch문의 끝을 만나면 switch 문 전체를 빠져나간다.
형식은 다음과 같다.
switch(조건식) {
case 값1 : // 조건식의 결과가 값1과 같을 경우 수행될 문장들
break;
case 값2 : // 조건식의 결과가 값2과 같을 경우 수행될 문장들
break;
case 값3 : // 조건식의 결과가 값3과 같을 경우 수행될 문장들
break;
default : // 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
⦁ switch문의 제약 조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며 중복되지 않아야 한다.
int num, result;
final int ONE = 1;
switch(result) {
case ‘1’ : // OK. 문자 리터럴(정수 49와 동일)
case ONE : // OK. 정수인 상수
case “YES” : // OK. 문자열 리터럴. JDK 1.7부터 허용
case num : // 에러. 변수는 불가
case 1.0 : // 에러. 실수는 불가
}
import java.util.Scanner;
public class Ex4_6 {
public static void main(String[] args) {
System.out.println("현재 월을 입력하세요");
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month) {
case 3, 4, 5:
System.out.println("현재의 계절은 봄입니다.");
break;
case 6, 7, 8:
System.out.println("현재의 계절은 여름입니다.");
break;
case 9, 10, 11:
System.out.println("현재의 계절은 가을입니다.");
break;
default:
System.out.println("현재의 계절은 겨울입니다");
}
}
}
★ 특별한 의도가 있지 않은 이상 switch문을 쓸 때 break를 빼먹으면 안 된다.
⦁ 임의의 정수 만들기
Math.random() - 0.0과 1.0 사이의 임의의 double값을 반환
0.0 <= Math,random() < 1.0
ex) Math.random()을 이용해서 1~3 사이의 정수(1 or 2 or 3) 얻기
1) 각 변에 3을 곱한다
0.0 <= Math.random() * 3 < 3.0
2) 각 변을 int형으로 변환한다.
(int)0.0 <= (int)(Math.random() * 3) < (int)3.0
0 <= (int)(Math.random() * 3) < 3
3) 각 변에 1을 더한다
1 <= (int)(Math.random() * 3) < 4
public class Ex4_7 {
public static void main(String[] args) {
int num = 0;
// 괄호{} 안의 내용을 5번 반복한다.
// Quiz1. 1~10 사이의 난수를 20개 출력하시오
// 1,2,3,4,5,6,7,8,9,10
// for (int i = 1; i <= 20; i++) {
// num = (int)(Math.random()*10) + 1;
// System.out.println(num);
// }
// Quiz2. -5~5사이의 난수를 20개 출력하시오
// -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 -> 11개
for (int i = 1; i <= 20; i++) {
num = (int)(Math.random()*11)-5;
System.out.println(num);
}
}
}
난수의 개수 = 조건문 반복횟수
난수의 종류 = Math.random()에 곱해줄 숫자
⦁for문
조건을 만족하는 동안 블록{}을 반복 – 반복횟수를 알 때 적합

public class Ex4_10 {
public static void main(String[] args) {
int sum = 0;
for(int i=1; i <=5; i++) {
sum += i;
System.out.printf("1부터 %2d 까지의 합: %2d%n", i, sum); // %2d - 2칸으로 표시
}
}
}
⦁ 중첩 for문
for문 내에 또 다른 for문을 포함시킬 수 있다.
ex) 구구단 2~9단 출력
public class Ex4_11 {
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));
}
System.out.println();
}
} // main의 끝
}
ex) 별 찍기
public class Practice0303 {
public static void main(String[] args) {
// 별 1개부터 10개까지 찍기
for (int i=1; i<=10; i++) {
for (int j=1; j<=i; j++) {
System.out.print("*");
}
System.out.println(); // 줄바꿈 역할
}
// 별 9개부터 1개 찍기
for (int k=1; k<=9; k++) {
for (int l=9; l>=k; l--) {
System.out.print("*");
}
System.out.println();
}
} // main의 끝
}
⦁ while문
조건을 만족시키는 동안 블록{}을 반복 – 반복횟수 모를 때 사용
while문과 for문은 완벽히 호환 가능
while (조건식) {
// 반복될 문장
}
ex) 입력받은 숫자의 각 자리수의 합을 구하는 프로그램
import java.util.Scanner;
public class Ex4_14 {
public static void main(String[] args) {
int num = 0, sum = 0;
System.out.println("숫자를 입력하세요.(예:12345)");
Scanner sc = new Scanner(System.in);
String tmp = sc.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문
블록 {}을 최소한 한 번 이상 반복 – 사용자 입력받을 때 유용
do {
// 반복될 내용
} while (조건식); <- (끝에 ‘ ; ’을 잊지 않도록 주의)
ex) 1~100 사이의 랜덤 정수를 맞추는 프로그램
import java.util.Scanner;
public class Ex4_15 {
public static void main(String[] args) {
int input = 0, answer = 0;
answer = (int)(Math.random() * 100) + 1;
Scanner sc = new Scanner(System.in);
do {
System.out.println("1과 100사이의 정수를 입력하세요.");
input = sc.nextInt();
if(input > answer) {
System.out.println("더 작은 수로 다시 시도해보세요.");
} else if(input < answer) {
System.out.println("더 큰 수로 다시 시도해보세요.");
}
} while(input!=answer);
System.out.println("정답입니다.");
}
}
⦁ break문
자신이 포함된 하나의 반복문을 벗어난다.
public class Ex4_16 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while(true) { // 무한 반복문, for(;;)와 같음
if (sum > 100) {
break; // 자신이 속한 반복문을 벗어난다.
}
++i;
sum += i;
}
System.out.println("i=" + i);
System.out.println("sum=" + sum);
}
}
⦁ continue문
자신이 포함된 반복문의 끝으로 이동 – 다음 반복으로 넘어감
전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용하다
ex) 3의 배수를 제외하고 출력하기
public class Ex4_17 {
public static void main(String[] args) {
for (int i=0; i <= 10; i++) {
if (i%3==0)
continue; // 조건식이 참이 되어 continue 문이 수행되면 블록의 끝으로 이동함. 반복문을 벗어나지 않음
System.out.println(i);
}
}
}
ex) break와 continue를 활용한 무한 반복문
import java.util.Scanner;
public class Ex4_18 {
public static void main(String[] args) {
int menu = 0;
int num = 0;
Scanner sc = 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 = sc.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
menu = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
if(menu==0) {
System.out.println("프로그램을 종료합니다.");
break; // while 문을 완전히 빠져나감
} else if (!(1 <= menu && menu <= 3)) {
System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
continue;
}
System.out.println("선택하신 메뉴는 "+ menu + "번 입니다.");
}
}
}
⦁ 이름붙은 반복문
반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.
public class Ex4_19 {
public static void main(String[] args) {
// for문에 Loop1 이라는 이름을 붙였다.
Loop1 : for(int i=2; i<=9;i++) {
for(int j=1; j<=9; j++) {
if(j==5)
break Loop1;
// break;
System.out.println(i+"*"+j+"="+i*j);
} // for문의 끝
System.out.println();
} // Loop1의 끝
} // Main의 끝
}
import java.util.Scanner;
public class Ex4_20 {
public static void main(String[] args) {
int menu = 0;
int num = 0;
Scanner sc = new Scanner(System.in);
outer: while(true) { // while문에 outer라는 이름을 붙인다.
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.println("원하는 메뉴(1~3)를 선택하세요.(종료:0)");
String tmp = sc.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
menu = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환
if(menu==0) {
System.out.println("프로그램을 종료합니다.");
break; // while 문을 완전히 빠져나감
} else if (!(1 <= menu && menu <= 3)) {
System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
continue;
}
for(;;) {
System.out.println("계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99");
tmp = sc.nextLine();
num = Integer.parseInt(tmp);
if(num==0)
break; // 계산 종료. for문을 벗어난다.
if(num==99)
break outer; // 전체 종료. for문과 while문을 모두 벗어난다.
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의 끝
}
출처 - 유튜브 남궁성의 정석코딩 [자바의 정석 - 기초편]
어디선가 들어본 난수 생성, 난수 맞추기, 별 찍기, 계산기 만들기를 오늘 처음 배워봤는데 다시 따라할 때 까먹거나 헷갈리고 작성 속도도 느렸음
이 공부는 반복이 답인거 같다. 귀찮지만 반복을 많이해봐야 익숙해지고 빨라진다.
'Java > Java의 정석' 카테고리의 다른 글
220305 Java - Chapter 6. 객체지향 개념I Part.1 (0) | 2022.03.05 |
---|---|
220304 Java - Chapter 5. 배열 (0) | 2022.03.04 |
220302 Java - Chapter 3. 연산자(Operator) (0) | 2022.03.02 |
220301 Java - Chapter 2. 변수 (0) | 2022.03.01 |
220228 Java - Thread (0) | 2022.02.28 |