어떤 조건에 만족할 때까지 같은 처리를 반복하여 실행하는 구조. (제어문)
반복 횟수가 정해지지 않은 경우 자주 사용함.
// Hello World를 5번 출력
// 반복횟수를 제어해줄 정수형 num 선언하기
// while문 반복 (예제 1)
int num = 0;
// 조건식 반복문
while (num < 6) {
System.out.println("Hello World!");
num++;
}
// while문 반복 (예제 2)
int num2 = 0;
// 무한 반복문
while(true) {
System.out.println("산대특 클라우드기반 인공지능");
num2++;
// if문으로 5번 조건 설정
if (num2 >= 5) {
break; // 반복을 멈추는 키워드
}
}
/*
while문을 사용하여 키보드로 부터 입력받은 수가 10보다 작거나
같은때만 계속 정수를 입력 받으세요. 10보다 큰 수를 입력하면
"종료되었습니다"를 출력
*/
while(true) {
System.out.print("정수 입력 : ");
int num = sc.nextInt();
totalNum += num;
System.out.println("누적결과 : " + totalNum);
if (num == -1) {
totalNum += num;
System.out.println("종료되었습니다.");
break;
}
}
/*
* 숫자를 입력 받아 홀수와 짝수가 각각몇개 입력되었는지
* 출력하는 프로그램을 작성하시오.
* -1을 입력한 경우 프로그램 종료.
*/
int count1 = 0;
int count2 = 0;
while(true){
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력 : " );
int num = sc.nextInt();
if(num % 2 == 0){
count1++;
System.out.println("짝수개수 : " + count1);
System.out.println("홀수개수 : " + count2);
} else if (num == -1) {
System.out.println("종료되었습니다.");
break;
} else {
count2++;
System.out.println("짝수개수 : " + count1);
System.out.println("홀수개수 : " + count2);
}
}
/*
* do-while문 예제 - 몸무게 관리 프로그램
* 1. 현재 몸무게와 목표 몸무게를 입력 받으세요.
* 2. 주 차별 감량 몸무게를 입력 받으세요.
* 3. 현재 몸무게가 목표 몸무게에 달성하면
* 축하한다는 문구를 출력하고 종료한다.
*/
Scanner sc = new Scanner(System.in);
int week = 0; // 주 차 증감자
int manus = 0; // 주 차별 감량 몸무게
//현재 몸무게와 현재 몸무게 입력받음
System.out.print("현재 몸무게를 적으세요 : ");
int weight = sc.nextInt(); //현재 몸무게
System.out.print("목표 몸무게를 적으세요 : ");
int goalWeight = sc.nextInt(); //목표 몸무게
System.out.println("현재 몸무게 : " + weight);
System.out.println("목표 몸무게 : " + goalWeight);
do {
week++;
System.out.print(week+"주차 감량 몸무게 : ");
manus = sc.nextInt();
weight -= manus;
if (weight == goalWeight) {
break;
}
} while(weight >= goalWeight) ;
System.out.print(weight+"kg 달성!! 축하합니다!!");
/*
* do-while문 예제 - pius game
1. 랜덤으로 정수 2개를 뽑아 문제를 출력하시오.
2. 사용자로부터 두 수의 합과 일치하면 * :성공:
3. 입력 받은 값이 "실패.."를 출력해주세요.
4. 실패하면 다시하겠습니까? 물어보고 N하면 게임 종료
*
*/
// 랜덤한 숫자 뽑아서 더하기 게임
Scanner sc = new Scanner(System.in);
// 1. 랜덤한 숫자 생성하는 도구 꺼내오기
Random ran = new Random();
System.out.println("=====Plus Game=====");
do {
// 2. 랜덤한 숫자 2개 생성하기(1~10 범위)
int num1 = ran.nextInt(10) + 1;
int num2 = ran.nextInt(10) + 1;
// 3. 문제 출력하기
System.out.print(num1 + "+" + num2 + "=");
// 4. 사용자로부터 정답 입력받기
int answer = sc.nextInt();
// 5. 입력받은 숫자와 실제 정답이 같은지 비교
if (answer == num1 + num2) {
// 정답을 맞췄을 때 !
System.out.println("성공!");
} else {
// 정답이 틀렸을 때 !
System.out.println("실패!");
// 6. 계속하시겠습니까? 출력
System.out.print("계속하시겠습니까? >> ");
// 7. Y 또는 N을 입력 받기
// 문자를 입력 받을 때는 String으로 입력 받자!
String con = sc.next();
if (con.equals("N") || con.equals("n")) {
// String은 기본형이 아닌 특이한 데이터 타입이다.
// 그래서 비교하기 위해서는 .equals()를 사용해야 한다.
// 8. N을 입력 받으면 프로그램 종료
System.out.println("프로그램 종료 !");
break;
}
}
} while (true);
횟수가 정해진 경우 자주 사용함.
1 → 2 → 4 → 3 →
2(true) → 4 → 3 →
2(true) → 4 → 3 →
2(true) → 4 → 3 →
2(true) → 4 → 3 →
2(true) → for문 끝
// 1부터 10까지 출력하는 for문을 만들어 보자.
for (int i = 1; i <= 10; i++) {
System.out.print(i+" ");
}
// 1. for문을 사용하여 96에서 73까지 출력하세요.
for(int i = 96; i>=73; i--) {
System.out.print(i+" ");
}
System.out.println();
// 2.숫자들 중 홀수만 출력하세요.
for(int i = 96; i>=73; i--) {
if (i%2 == 1) {
System.out.print(i +" ");
}
}
// 3.for문을 사용하여 구구단 2단을 출력하세요.
int num = 2;
for (int i = 1; i <= 9; i++) {
System.out.println(num + " * " + i + " = " + num * i);
}
// 4. 입력받은 정수의 약수를 구하세요.
// - 숫자를 입력 받는다.
// - 입력 받은 숫자를 임의의 숫자로 나누었을대 나머지가 0이라면 약수
// 1.도구 가져오기
Scanner sc = new Scanner(System.in);
// 2. 입력 받는 출력문
System.out.print("정수입력 : ");
// 3. 값 입력 받기
int num = sc.nextInt();
// 4. 반복문으로 수 계산
for (int i = 1; i <= num; i++) {
// 5. 조건으로 출력할 수 계산
if (num % i == 0) {
// 6.조건이 맞을때 숫자를 출력 (i는 num의 약수!)
System.out.print(i + " ");
}
}
// 5. (77*1) + (76*2) + (75*3) + ... + (1*77)을 계산하여 결과를 출력하세요.
int num = 1; // 1 ~ 77 까지 증가할 숫자
int sum = 0; // 곱셈결과를 누적시킬 공간
for (int i = 77; i >= 1; i--) { // i : 77 ~ 1 까지 감소할 숫자
//sum = sum + i * num;
sum += i * num;
num++ ; //num 값을 1 ~ 77까지 증가시킴
}
System.out.println(sum);
중첩 반복문 또는 이중 for문
실습예제 : 별찍기 여러가지
// 1. 반드시 한 줄씩 처리해서 패턴을 찾아낼 것 !
// *
// **
// ***
// ****
// *****
for (int j = 1; j < 6; j++) {
for (int i = 0; i < j; i++) {
System.out.print("*");
}
System.out.println();
}
// 숙제 1) 처음이 5개에서 끝은 1개의 별로 해보기
// *****
// ****
// ***
// **
// *
for (int j = 5; j > 0; j--) {
for (int i = 0; i < j; i++) {
System.out.print("*");
}
System.out.println();
}
// 숙제 2) 공포의 별찍기? : 공백 후 별 위치찍기
// *
// **
// ***
// ****
// *****
for (int j = 5; j > 0; j--) {
for (int i = 1; i < j; i++) {
System.out.print(" ");
}
for (int i = 6; i > j; i--) {
System.out.print("*");
}
System.out.println();
}
// 숙제 2.5) 공포의 별찍기? : 트리만들기
System.out.println("숙제 2.5) 별로 트리만들기 !");
// *
// ***
// *****
// *******
// *********
for (int j = 5; j > 0; j--) {
for (int i = 1; i < j; i++) {
System.out.print(" ");
}
for (int k = 6; k > j; k--) {
System.out.print("*");
if (k != 6) {
for (int i = 0; i < 1; i++) {
System.out.print("*");
}
}
}
System.out.println();
}
이중 for문은 실행순서를 명확히 알아야 한다.
ctrl + Shift + F = 정렬하기