1. while 문
int i=1; // 초기화
while (조건식) {
// 조건식이 연산결과가 참인 동안, 반복될 문장들을 적는다.
System.out.println(i);
i++; // 증감식
}
💡 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭 {} 내의 문장을 수행하고 다시 조건식으로 돌아간다.
➡️ 조건식이 거짓이 될 때까지 이 과정이 계속 반복
💡 조건식에는 비교 또는 논리 연산식이 주로 옴
💡 for문과 while문은 항상 서로 변환이 가능. 단, for문과 달리 조건식 생략 불가!
public class MyWhile_02 {
public static void main(String[] args) {
/* for문을 while문으로 변경 */
int num;
int sum = 0;
for (num=1; num <= 10; num++) {
sum += num;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
// While문도 초기값, 조건식, 증감식이 존재.
num = 1;
sum = 0;
while(num <= 10) {
sum += num;
num++;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}
중첩 while문
public class MyWhile_11 {
public static void main(String[] args) {
/* 중첩 while, 구구단 출력 */
int i = 2;
while(i <= 9) {
System.out.println("*** " + i + "단 ***");
int j = 1;
while(j <= 9) {
System.out.println(i +" * "+j+" = " + i*j);
j++;
}
System.out.println();
i++;
} // end of while(i<=9)
}
}
응용 문제
public class Exam022 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String answer = "Y"; // while이 시작될 수 있도록 응답 값을 초기화.
int count = 0;
while (answer.equals("Y")|| answer.equals("y")) {
System.out.println("음악을 재생하시겠습니까?(Y or y)");
answer = scanner.nextLine(); // 사용자의 응답을 받습니다.
answer = answer.toUpperCase(); // 입력받은 문자열을 대문자로 변경.
if (answer.equals("Y") || answer.equals("y")) {
count++;
System.out.println("음악을 "+count+"번 재생했습니다.");
}
}
System.out.println("재생종료");
scanner.close();
}
}
2. do-while 문
💡 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서를 바꿔놓은 것
➡️ 블럭{}을 먼저 수행한 후에 조건식을 평가
➡️ while문은 조건식의 결과에 따라 블럭{}이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것을 보장한다.
💡 실무에서 잘 사용하지는 않음
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식);
public class Exam023 {
public static void main(String[] args) {
/* do~while문은 조건이 거짓이라도 적어도 한번은 문장이 출력된다. */
int num = 100;
do {
System.out.println("적어도 한번은 출력되는 문장");
} while(num < 10);
}
}
응용 문제
public class Ex_03_dowhile_01 {
public static void main(String[] args) {
/* do while 문을 사용해서 사용자로 부터 월의 번호를 입력받는 프로그램을 작성해 보세요.
* 사용자가 올바른 월 번호를 입력할 때 까지 반복을 계속합니다.
* 사용자가 올바른 월 번호를 입력해야만 다음 문장으로 넘어갑니다. */
Scanner scanner = new Scanner(System.in);
int month;
do {
System.out.print("올바른 월을 입력하세요 [1-12] ");
month = scanner.nextInt();
} while (month < 1 || month > 12);
System.out.println("사용자가 입력한 월은 " + month + "입니다.");
scanner.close();
}
}
📄 Random random = new Random();
- Random 클래스의 인스턴스를 생성하여 random이라는 변수에 저장하는 코드
- Random : Java에서 무작위 숫자를 생성하기 위한 클래스로, java.util 패키지에 포함되어 있다. 이 클래스는 난수를 생성하는 다양한 메서드를 제공함.
- random() 메소드는 0.0과 1.0 사이의 double 타입 난수를 리턴
⚡️ 0.0 <= Math.random() < 1.0
💡 start 부터 시작하는 n개의 정수 중에서 하나의 정수를 얻기 위한 코드
int num = (int) (Math.random() * n) + start;
public class Ex_03_while_01_pr {
public static void main(String[] args) {
/* while 문과 Random.nextInt() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1,눈2)
* 형태로 출력하고, 눈의 합이 5가 되는 조합은 (1,4) (4,1) (2,3) (3,2) 입니다.
* 예) (5,1)
* (4,4)
* (6,5)
* (5,2)
* (3,6)
* (1,2)
* (2,3)
*/
Random random = new Random();
while(true) {
int num1 = random.nextInt(6) + 1;
int num2 = random.nextInt(6) + 1;
System.out.println("(" + num1 + ", " + num2 + ")");
if ((num1+num2) == 5) {
break;
}
}
}
}
응용 문제
public class Ex_03_while_02 {
public static void main(String[] args) {
/* 컴퓨터가 주사위를 던지면 사용자가 주사위의 숫자를 맞히는 프로그램을 완성하세요.
사용자가 맞힐 때까지 게임은 계속 됩니다.
예)
주사위 값은 얼마일까요? >>> 5
오답입니다. 다시 시도하세요.
주사위 값은 얼마일까요? >>> 1
1! 정답입니다.
1) break를 사용
2) break를 사용안하는 경우 */
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int answer = random.nextInt(6) + 1;
// System.out.println(answer);
while(true) {
System.out.print("주사위 값은 얼마일까요? >>> ");
int num = scanner.nextInt();
if (answer == num) {
break;
}
System.out.println("오답입니다. 다시 시도하세요.");
}
System.out.println(answer + "! 정답입니다.");
scanner.close();
}
}
3. break 문
💡 자신이 포함된 가장 가까운 반복문을 벗어난다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.
public class Exam024 {
public static void main(String[] args) {
/* 반복문을 빠져나오는 방법은 1) 조건식이 false가 되거나 2) break문이 실행.
* break문은 반복을 멈추게 함.
* 반복문이 진행되다가 break문을 만나면 곧 바로 반복문을 벗어나서 반복문 다음의 코드를 수행. */
Scanner scanner = new Scanner(System.in);
int sum = 0;
int num;
while(true) {
System.out.println("더할 숫자를 입력하세요:(종료하려면 0입력)");
num = scanner.nextInt(); //정수 입력받아서 num에 저장
if (num == 0) { // 만약 0을 입력하였다면 종료.
break;
}
sum += num; //입력받은 값 더해주기.
}
System.out.println("현재까지의 총합 = " + sum);
scanner.close();
}
}
4. continue 문
💡 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
🔅 break 문 ➡️ 반복을 종료, 실행 후 코드 아래의 반복문 코드는 실행되지 않음
🔅 continue 문 ➡️ 다음 반복으로 이동, 실행 후 코드 아래의 반복문 코드는 실행되지 않음
public class MyContinue_01 {
public static void main(String[] args) {
/*
continue문은 현재의 반복을 뛰어넘고 다음 반복을 진행.
반복문이 진행되다가 continue문을 만나면 반복문의 제일 끝으로 가서 다음 반복을 계속 수행.
0 ~ 100까지의 홀수만 더 함
*/
int total = 0;
int num;
for(num=0; num<=100; num++) {
if(num%2 == 0) {
continue;
}
total += num;
}
System.out.println("1부터 100까지의 홀수의 합은 " + total + "입니다.");
}
}
응용 문제
public class Exam025_01 {
public static void main(String[] args) {
/* 한번에 출금할 수 있는 금액은 1000원 이하, break 사용하지 말것 */
// break 사용하지 않는 방법 -> while의 조건식을 이용해서 반복문은 빠져 나올것.
// -> 조건식에 뭘 써야 하나? -> break의 if 조건식은 반복을 종료하는 조건.
// -> while의 조건식은?
Scanner scanner = new Scanner(System.in);
int money = 10000;
System.out.println("현재 가진 돈은 " + money + "원 입니다.");
while(money > 0) {
System.out.print("얼마를 사용하시겠습니까? >>> ");
int spendMoney = scanner.nextInt(); // 정수를 입력받음.
if(spendMoney <= 0 || spendMoney > money) {
System.out.println("다시 입력해 주세요(사용범위가 틀렸습니다.)");
continue; // 현재의 반복을 벗어나서 다시 반복을 시작
} else if (spendMoney > 1000) {
System.out.println("1000원 이상은 출금할 수 없습니다.");
continue;
}
money -= spendMoney;
System.out.println("이제 " + money + "원이 남았습니다.");
}
System.out.println("모든 돈을 사용합니다. 종료");
scanner.close();
}
}
[ 출처 ; 학원 강의 및 자바의 정석 책 ]
'Programming Language > JAVA' 카테고리의 다른 글
[Java] Array | 배열의 활용 · 2차원 배열 (0) | 2024.08.09 |
---|---|
[Java] Array | 배열 선언과 생성 · 배열 길이와 인덱스 · 배열 초기화 · 배열 출력 (0) | 2024.08.09 |
[Java] Switch문 · for문 (0) | 2024.05.22 |
[Java] 비트 연산자 · if 문 (0) | 2024.05.21 |
[JAVA] 연산자 [단항/복합/대입/비교/논리/삼항] 및 우선순위 (0) | 2024.04.05 |