for문
for ([반복변수]; [반복조건]; [반복변수증감식]) {
반복하여 실행할 문장
}
// 1부터 10까지 츨력
for (int i = 1; i < 11; i++) {
System.out.println(i);
}
문제 1: 구구단
💡 2단부터 9단까지 출력하라.
출력 예:
2단
2x1=2 2x2=4 ... 2x9=18 ...
9단
9x1=9 9x2=18 ... 9x9=81
코드
for (int i = 2; i < 10; i++) {
System.out.println(i + "단");
for (int j = 1; j < 10; j++) {
System.out.print(i + "x" + j + "=" + i * j + " ");
}
System.out.println();
}
실행 결과
문제 2: 방정식
💡 4x + 5y = 60 을 만족하는 x, y 값을 출력하라. (단, x, y는 1이상 10이하인 정수)
코드
for (int x = 1; x <= 10; x++) {
for (int y = 1; y <= 10; y++) {
if ((4 * x) + (5 * y) == 60) {
System.out.println("x: " + x + " y: " + y);
}
}
}
1 이상 10 이하
인 정수 x
, y
값을 모두 대입하여 방정식을 만족하는 값을 찾도록 구현하였습니다.
실행 결과
x: 5, y: 8
x: 10, y: 4
문제 3
💡 정수를 하나 입력 받고 1부터 입력 받은 정수까지의 정수 중에서 2의 배수, 3의 배수를 제외한 수의 총합 출력
코드
Scanner scanner = new Scanner(System.in);
int num = 0, sum = 0;
System.out.print("숫자 입력: ");
num = scanner.nextInt();
for (int i = 1; i <= num; i++) {
if ((i % 2 != 0) && (i % 3 != 0)) {
System.out.println("i = " + i);
sum += i;
}
}
System.out.println("sum = " + sum);
2의 배수
, 3의 배수
를 판별하기 위해 %
연산자를 활용하였습니다.
실행 결과
문제 4: 별 찍기
💡 출력 예)
*
**
***
****
*****
*****
****
***
**
*
코드
for (int i = 1; i <= 5; i++) { // 줄수, 별을 출력할 횟수
for (int j = 1; j <= i; j++) { // 별을 줄수만큼 출력
System.out.print("*");
}
System.out.println(); // 줄을 바꾸기 위한 용도
}
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print("*");
}
System.out.println(); // 줄을 바꾸기 위한 용도
}
안쪽 for
문의 j
시작 값을 다르게 하여 출력되는 별의 개수를 컨트롤하였습니다.
while문
횟수가 정해져 있지 않은 상황에서 활용을 할 수 있는 반복문입니다. for
문과 동일한 목적으로도 사용 가능합니다.while
와 do while
으로 구분됩니다. while
은 반복 조건을 만족해야 한 번이라도 실행되고, do while
은 반복 조건 만족과 상관없이 한번은 실행하고 조건을 따진다는 특징이 있습니다.
while ([조건식]) {
조건을 만족할 경우 실행할 문장
}
do {
조건을 따지기 전에 한번은 실행됨
조건을 만족하면 반복실행
} while([조건식]); // 마지막에 세미콜론(;)이 붙음
문제 1
💡 random() 메서드를 이용해서 1~6이 나오는 주사위를 설정하고 주사위가 계속 던져지면서 6이 나오면 종료되는 코드를 작성하라.
코드
int dice = 0;
while(dice != 6) {
dice = (int) (Math.random() * 6) + 1;
System.out.println("dice = " + dice);
}
System.out.println("6이 나왔습니다. 종료 !");
실행 결과
문제 2
💡 random() 메서드를 이용해서 1~100 사이의 숫자를 하나 만든다. 반복문 안에서 해당 숫자를 맞출 때까지 계속 숫자를 입력받도록 하고, 숫자를 맞추면 종료하고 몇 번만에 맞췄는지를 출력해주는 프로그램을 작성하라.
코드
Scanner scanner = new Scanner(System.in);
int n = (int) (Math.random() * 100) + 1;
boolean run = true;
int cnt = 0;
int input = 0;
while (run) {
System.out.print("1부터 100까지의 숫자를 입력하세요: ");
input = scanner.nextInt();
if (input == n) {
System.out.println("맞췄습니다.");
run = false;
} else if (input > n) {
System.out.println("더 작은 수를 입력하세요.");
} else {
System.out.println("더 큰 수를 입력하세요.");
}
cnt++;
}
System.out.println("시도 횟수는 " + cnt + "회 입니다.");
실행 결과
문제 3
💡 1 + (-2) + 3 + (-4) + 5 + (-6) ... 와 같이 계산을 했을 때 합계가 100이 됐을 때의 숫자를 출력
코드
// 합계용 변수
int sum = 0;
// 1, 2, 3, 4, 5 ...
int count = 1;
// 1, -2, 3, -4, 5, -6 ...
int num = 0;
// 부호용 변수
int s = 1;
boolean run = true;
while (run) {
sum += num;
if (sum >= 100) {
run = false;
} else {
num = s * count;
s = -s; // 1, -1, 1, -1
count++;
}
}
System.out.println("num = " + num);
System.out.println("sum = " + sum);
실행 결과
문제 4: 계좌 예금, 출금, 잔고 확인 프로그램
코드
boolean run = true;
int deposit = 0; // 입금액
int withdraw = 0; // 출금액
int select = 0; // 기능선택
int balance = 0; // 잔고
Scanner scan = new Scanner(System.in); // Scanner 클래스타입의 변수 scan
while (run) {
System.out.println("-------------------------------------");
System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
System.out.println("-------------------------------------");
System.out.print("선택> ");
select = scan.nextInt();
if (select == 1) {
// 예금
System.out.print("예금액>");
deposit = scan.nextInt();
balance += deposit;
System.out.println("입금이 완료되었습니다.");
System.out.println("현재잔액은 " + balance + "원 입니다.");
} else if (select == 2) {
// 출금
System.out.print("출금액>");
withdraw = scan.nextInt();
if (withdraw > balance) {
System.out.println("잔고가 부족합니다.");
System.out.println("현재잔액은 " + balance + "원 입니다.");
} else {
// withdraw >= balance
balance -= withdraw;
System.out.println("출금이 완료되었습니다.");
System.out.println("현재잔액은 " + balance + "원 입니다.");
}
} else if (select == 3) {
// 잔고
System.out.println("현재잔액은 " + balance + "원 입니다.");
} else if (select == 4) {
// 종료
run = false;
System.out.println("종료합니다. 이용해주셔서 감사합니다.");
} else {
// 잘못된 선택
System.out.println("없는 메뉴입니다. 다시 선택해주세요.");
}
}
배운 점
다양한 for
문과 while
문 예제를 풀어보면서 활용 방법에 대해 학습하였습니다. 방정식
문제를 수학 문제를 풀듯이 푸는 것이 아니라, 모든 값을 대입하여 풀었습니다. 사람이 인지적 사고
로 문제를 해결하는 것과는 다르게, 컴퓨터
가 효과적으로 수행할 수 있도록 문제를 정의하고 그에 대한 답을 기술하였습니다. 이를 통해 컴퓨팅적 사고력
을 기르고, 코딩이란 컴퓨터와의 대화
라는 것을 다시 한 번 깨달았습니다. 또한 학부 시절 많이 연습했던 별 찍기 등을 다시 해보면서 반복문에 더 익숙해질 수 있었습니다.
'All Categories > BE & Java' 카테고리의 다른 글
개발일지 #8 - Java 자료형, 문자열(String) (0) | 2023.12.11 |
---|---|
개발일지 #7 - Java Math.random(), 형 변환(Casting, Promotion) (0) | 2023.12.11 |
개발일지 #5 - Java switch case, 지역 변수 / 전역 변수 (0) | 2023.12.05 |
개발일지 #4 - Java Scanner, 제어문, Dead Code (1) | 2023.12.04 |
개발일지 #3 - Java 기본(변수, 연산자) (0) | 2023.12.01 |