반복 구조(while, do-while, for)
어떤 복잡한 프로그램 로직도 세 가지 기본 구조를 통해 표현할 수 있습니다:
- 순차 구조: 위에서 아래로 한 줄씩 실행되며 모든 문장이 반드시 실행됩니다.
- 분기 구조: 조건에 따라 특정 문장을 한 번 실행하며, 모든 문장이 실행되는 것은 아닙니다.
- 반복 구조: 조건에 따라 특정 문장을 여러 번 반복 실행하며, 모든 문장이 실행되는 것은 아닙니다.
-
반복: 동일하거나 유사한 코드를 반복적으로 실행하는 것
-
반복의 세 가지 요소:
- 반복 변수 초기화
- 반복 조건 (반복 변수에 기반함)
- 반복 변수 갱신 (반복 종료 방향으로 변화) 반복 변수: 반복 과정에서 변경되는 값
- 반복 구조:
- while: 조건 판단 후 실행, 조건이 처음부터 거짓일 경우 한 번도 실행되지 않을 수 있음
- do...while: 먼저 실행 후 조건 판단, 최소한 한 번은 실행됨 첫 번째와 세 번째 요소가 동일할 경우 선호
- for: 가장 널리 사용되며, 고정된 횟수의 반복을 위한 구조
- break: 반복문을 완전히 종료 continue: 현재 반복에서 남은 문장을 건너뛰고 다음 반복으로 이동
Math.random(): Math.random()------------------ 0.0 이상 1.0 미만의 실수 × 1000 ----------------------- 0.0 이상 999.999... 미만의 실수
- 1 -------------------------- 1.0 이상 1000.999... 미만의 실수 (int) ------------------------ 0 이상 999 이하의 정수
- 1 -------------------------- 1 이상 1000 이하의 정수
for-랜덤 덧셈 문제 풀이기
package day04;
import java.util.Scanner;
// 랜덤 덧셈 문제 풀이기
public class MathQuiz {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int totalScore = 0; // 총 점수
for(int count=1;count<=10;count++){ // 10번 반복
int operand1 = (int)(Math.random()*100); // 피연산자1
int operand2 = (int)(Math.random()*100); // 피연산자2
int correctAnswer = operand1 + operand2; // 정답
System.out.println("("+count+")"+operand1+"+"+operand2+"=?"); // 문제 출력
System.out.println("계산해보세요!");
int userAnswer = input.nextInt(); // 사용자 입력
if(userAnswer==-1){ // 종료 조건
System.out.println("다음에 다시 만나요!");
break;
}
if(userAnswer==correctAnswer){
totalScore += 10; // 정답 시 10점 추가
System.out.println("맞았습니다");
}else{
System.out.println("틀렸습니다");
}
}
System.out.println("총 점수="+totalScore);
}
}
while 반복 예제:
package day04;
// while 반복 예제
public class MultiplicationTable {
public static void main(String[] args) {
int number = 1;
while(number<10){
System.out.println(number+"*9="+number*9);
number++;
}
System.out.println("완료");
}
}
do while 반복 예제:
package day04;
import java.util.Scanner;
// 숫자 맞추기 게임
public class NumberGuessing {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int targetNumber = (int)(Math.random()*1000+1); // 1에서 1000 사이의 난수
System.out.println(targetNumber); // 도움말
int guess;
do{
System.out.println("맞혀 보세요!");
guess = input.nextInt(); // 추측 입력
if(guess==0){
break;
}
if(guess>targetNumber){
System.out.println("너무 큽니다");
}else if(guess<targetNumber){
System.out.println("너무 작습니다");
}
}while(guess!=targetNumber); // 조건 확인
if(guess==targetNumber){
System.out.println("축하합니다! 맞췄습니다!");
}else{
System.out.println("다음에 또 도전하세요!");
}
}
}
수열 합계 계산
1+2+3+4+5...+100의 합계 계산;
package day04;
// 1+2+3+4+5...+100의 합계 계산;
import java.util.Scanner;
public class SumCalculation {
public static void main(String[] args) {
int sum = 0;
for(int i=1;i<=100;i++){
sum = sum + i;
}
System.out.println(sum);
}
}<br></br>결과: 5050<br></br>
다음 수열: 9, 99, 999, ... , 9999999999. 이 수열의 합을 계산하여 콘솔에 출력하시오:
방법1:
public class SequenceSum {
public static void main(String[] args) {
// 수열 합계 계산
long digit = 9;
long total = digit;
for (int i = 2; i <= 10; i++) {
digit = digit * 10 + 9;
total += digit;
}
System.out.println("9+99+999+...+9999999999=" + total);
}
}
방법2:
public class Test01 {
public static void main(String[] args) {
// 9+99+999+9999+...+9999999999=?
long sum = 0; // 합계
long term = 0; // 항목
for(int i=1;i<=10;i++){ // 10번 반복
term = term*10+9;
sum = sum+term;
}
System.out.println("합계="+sum);
}
}
다른 수열: 1+1/2+1/3…+1/n (n>=2). 이 수열의 합을 사용자가 입력한 n값을 바탕으로 계산하고 결과를 콘솔에 출력하시오:
방법1:
import java.util.Scanner;
public class FractionSum {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("정수를 입력하세요 (예: 10):");
int n = reader.nextInt();
double result = 0;
for (int i = 1; i < n; i++) {
result += 1.0 / i;
if(i==1){
System.out.print("1+");
}else{
System.out.print("1/" + i + "+");
}
}
result += 1.0 / n;
System.out.print("1/" + n + "=" + result);
}
}
<br></br>
방법2:
public class Test01 {
public static void main(String[] args) {
// 1/1+1/2+1/3+...+1/n=?
int n = 15;
double total = 0;
for(int i=1;i<=n;i++){ // n번 반복
total = total+1.0/i;
}
System.out.println("합계="+total);
}
}