조건문과 반복문
조건문: 조건을 만족할 때만 { }를 수행(0~1번) – if와 switch
반복문: 조건을 만족하는 동안 { }를 수행(0~n번) – for와 while
조건문과 반복문은 실행 흐름을 바꿔 주기 때문에 제어문(flow control statement)라고 함
For문
조건을 만족하는 동안 블록 { }을 반복 -> 반복횟수를 알 때 적합
-> 변수의 범위는 좁을수록 좋음(넓을수록 확인해야 하는 값이 많아 지기 때문)
-> 조건식을 생략하면, true로 간주되어서 무한반복
//괄호 { }안의 문장을 10번 반복
for(int i = 1; i <= 10; i++) {
System.out.println(i);
}
for(int i = 10; i >= 1; i--) {
System.out.println(i);
}
for(int i = 1, j = 10; i <= 10; i++, j--) { //변수 i와 j가 같은 형이어야함
System.out.println("i= "+i+" j= "+j); //for문 안에서만 실행됨 밖에서는 xx\
중첩 for문
for문 내에 또 다른 for문을 포함시킬 수 있다.
안쪽 for문이 끝난 다음에 바깥 for문 실행
<구구단>
//구구단 코드 (2단부터 9단까지)
for(int i = 2; i<=9; i++) {
for(int j =1; j<=9; j++) {
System.out.println(i+"x"+j+"="+i*j);
}
System.out.println(""); //단마다 띄어쓰기 해주는 것이라서 생략 가능
}
**********
**********
**********
**********
**********
<5x10 별찍기>
//5X10 별찍기
// for(int i=1;i<=5;i++) {
// System.out.println("**********");
// }
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 10; j++) {
System.out.print("*");
}
System.out.println(); // 줄바꿈의 용도
}
*
**
***
****
*****
<피라미드>
//피라미드 (i값과 j값이 똑같이 증가해야 함, 그래서 조건이 같음)
for(int i = 0; i<=5; i++) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
while문
조건을 만족시키는 동안 블럭 { }을 반복 -> 반복횟수 모를 때(for문은 반복횟수 알 때)
while (조건식) {
// 조건식의 연산결과가 참(true)일 동안, 반복된 문장들을 적는다.
}
<입력한 자릿수를 더하는 프로그램 출력>
int num = 0, sum = 0;
System.out.println("숫자를 입력하세요.(예:12345)");
Scanner sc = new Scanner(System.in);
String tmp = sc.nextLine();
num = Integer.parseInt(tmp);
// 10으로 나머지 연산을 하면 마지막 자리의 값을 얻음(56%10 == 6)
while(num>0){
//num을 10으로 나눈 나머지를 sum에 더함
sum += num % 10; //sum = sum + num % 10
System.out.println("num"+num+" sum"+sum);
num = num / 10; // num = num / 10; num을 10으로 나눈 값을 num에 저장
}
System.out.println("각 자리수의 합: "+ sum);
do-while문
블럭 { }을 최소한 한 번 이상 반복 – 사용자 입력 받을 때 유용
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다. (처음 한 번은 무조건 실행)
} while (조건식) ; -> 끝에 ‘세미콜론’을 잊지 않도록 주의
<1과 100사이의 정수를 입력받고 난수로 생성된 값을 맞추기>
int num = 0, answer = 0;
answer = (int)(Math.random()*100)+1; // 1~100 사이의 난수
Scanner sc = new Scanner(System.in);
do {
System.out.print("1과 100사이의 정수를 입력하세요.>");
num = sc.nextInt();
if(num > answer) {
System.out.println("더 작은 수로 다시 시도하세요");
} else if(num < answer) {
System.out.println("더 큰 수로 다시 시도하세요");
}
} while(num!=answer); //answer와 num가 같지 않을 때 수행될 문장들
System.out.println("정답입니다.");
-> while로 바꿀 수 없는 이유는 코드 중복이 발생하기 때문에!
break문
자신이 포함된 하나의 반복문을 벗어난다.
<100이 될때까지의 합을 구하기(break문을 사용해서>
int i = 0, sum = 0;
while(true) { //무한 반복문 for(;;) { } / while문에서 조건식은 생략불가
if(sum > 100)
break;
++i;
sum += i;
} //end of while
System.out.println("i=" + i);
System.out.println("sum=" + sum);
continue문
자신이 포함된 반복문의 끝으로 이동 – 다음 반복으로 넘어 감
전체 반복 중에서 특정 조건 시 반복을 건너뛸 때 유용
break문과 달리 반복문을 벗어나지 않는다.
<1에서 10의 숫자 중에서 2의 배수일 때 출력하지 않는 프로그램 작성>
for(int i = 0; i <= 10; i++) {
if(i%2==0)
continue;
System.out.println(i);
}
<while문에서 break와 continue 메뉴 선택 프로그램>
int menu = 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.print("원하는 메뉴(1~2)를 선택하세요.(종료:0)>");
String tmp = sc.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+ "번 입니다.");
}
sc.close();
이름붙은 반복문
여러 반복문이 중첩되어 있을 때 반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.
Loop1 : for(int i=2; i<=9; i++){
for(int j=1; j<=9; j++){
if(j==5)
break Loop1; //바깥쪽 for문 만 빠져나옴
//break; //안쪽 for문만 빠져나오고 안쪽은 계속 돌아감
//continue Loop1;
//continue;
System.out.println(i+"*"+j+"="+i*j);
} // end of for i System.out.println();
System.out.println();
} // end of Loop1 }
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석1-8 배열들(String, 2차원)과 클래스(String, Arrays) (0) | 2021.12.30 |
---|---|
자바의 정석1-7 배열 (0) | 2021.12.30 |
자바의정석1-5 조건문 (0) | 2021.12.29 |
자바의 정석1-4 타입 변환과 연산자(operator) (0) | 2021.12.28 |
자바의 정석1-3 화면 입출력 (0) | 2021.12.28 |