본문 바로가기
Programming/Java

[Java] 반복문

by AI_Wooah 2022. 3. 7.

for 문

표현식 
for((1)초기식; (2)조건식; (3)증감식){ 
		.................
} 

로직순서

  • 1 회전 : 초기식(1) 확인 → 조건식 확인 (2) true면 { }안 내용 1회 실행, false면 반복문 실행하지 않음 초기식에서 변수를 선언하고 조건식으로 넘어감
  • 2 회전 : 증감(3)연산 → 조건식(2) 확인 true면 { }안 내용 1회 실행 false면 반복문 실행하지 않음 변수가 언제까지 실행되고 언제 끝낼지 결정하는 증감식을 넣어줌
  • 2회전 이상부터는 2 → 3 확인 후 조건식이 false가 나올 때까지 { } 1번씩 실행

✔ 1~5까지의 반복문 수행

public class A_for{
	public static void main(String[] args){ 
		for(int i = 1; i <= 5; i++){
			System.out.println(i + “번째 반복문 수행중...”); 
		}
	} 
}

👉 실행결과

1번째 반복문 수행중... 
2번째 반복문 수행중... 
3번째 반복문 수행중... 
4번째 반복문 수행중... 
5번째 반복문 수행중...

✔ 문자열 하나를 입력 받아 각 문자를 출력

public void testFor1() {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("문자열을 하나 입력하세요 : ");
		String str = sc.nextLine();
		
		for(int i = 0; i <= str.length() - 1; i++) {
			System.out.println(str.charAt(i));
		}
		
	}

👉 실행결과

문자열을 하나 입력하세요 : notion
n
o
t
i
o
n

✔ 정수 하나를 입력 받아 그 수가 양수일 때만 그 수의 구구단을 출력하게 하고, 양수가 아니면 "반드시 1~9 사이의 양수를 입력해야 합니다." 출력

public void testFor2() {
		
		
		Scanner sc = new Scanner(System.in);
		System.out.print("1~9사이의 양수를 하나 입력하세요 : ");
		int dan = sc.nextInt();
		
		if(dan > 0 && dan < 10) {
//			System.out.println(dan + " * 1 = " + (dan * 1));
//			System.out.println(dan + " * 2 = " + (dan * 2));
//			System.out.println(dan + " * 3 = " + (dan * 3));
//			System.out.println(dan + " * 4 = " + (dan * 4));
//			System.out.println(dan + " * 5 = " + (dan * 5));
//			System.out.println(dan + " * 6 = " + (dan * 6));
//			System.out.println(dan + " * 7 = " + (dan * 7));
//			System.out.println(dan + " * 8 = " + (dan * 8));
//			System.out.println(dan + " * 9 = " + (dan * 9));
//			
			
			for(int su = 1; su <10; su++) {
				System.out.println(dan + " * " + su + " = " + (dan * su));
			}
		} else {
			System.out.println("반드시 1~9 사이의 양수를 입력해야 합니다.");
		}
		
	}

👉 실행결과

1~9사이의 양수를 하나 입력하세요 : 8
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

✔ 1부터 100 사이의 임의의 난수까지의 정수들의 합계를 구하여 출력 예) 난수가 10인 경우 1+2+...+9+10의 합계가 55가 출력되어야 함

public void testFor3() {
		
		int random = (int)(Math.random()*100)+1;
		int sum = 0;
		
		for(int i = 1; i <= random; i++) {
			sum += i;
		}
		System.out.println("1부터 " + random + "까지의 합은 : " + sum);
		
	}

👉실행 결과

1부터 8까지의 합은 : 36

✔ 두 개의 정수를 입력받아 작은 수에서 큰 수까지의 합을 구하세요

public void testFor4() {
		Scanner sc = new Scanner(System.in);
		System.out.print("첫 번째 정수 : ");
		int num1 = sc.nextInt();
		System.out.print("두 번째 정수 : ");
		int num2 = sc.nextInt();
		
		int sum = 0;
		int x = 0;
		int y = 0;
		
		if(num1 > num2) {
			y = num1;
			x = num2;
		} else {
			x = num1;
			y = num2;
		}
		
		for(int i = x; i <= y; i++) {
			sum += i;
		}
		System.out.println(x + " 부터 " + y + " 까지의 합은 : " + sum);
		
	}

👉 실행결과

첫 번째 정수 : 14
두 번째 정수 : 58
14 부터 58 까지의 합은 : 1620

중첩 for문 : for문 안에 for문을 사용할 수 있다. ✔ 구구단 2단부터 9단까지 출력

public void testFor5() {

		
		//전체를 반복하는 반복문
		for(int dan = 2; dan < 10; dan++) {
			
			//구구단을 한 단만 출력하는 반복문
			for(int su = 1; su <10; su++) {
				System.out.println(dan + " * " + su + " = " + (dan * su));
			}
			System.out.println();
		}
		
	}
  • 👉 실행결과
  • 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

✔ 아날로그 시계 출력

public void testFor6() {
		//아날로그 시계 출력
		for(int hour = 0; hour < 12; hour++) {
			
			for(int min = 0; min <60; min++) {
				System.out.println(hour + "시" + min + "분");				
			}
		}
		
	}

👉 실행결과

0시0분
0시1분
0시2분
~ //너무 길어서 생략
11시57분
11시58분
11시59분

별찍기

✔ 한 줄에 5개씩 줄 수를 입력받아 별찍기

public void testFor7() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("출력할 줄 수 : ");
		int row = sc.nextInt();
		
		for(int i = 1; i<= row; i++) {
			
			for(int j = 1; j <= 5; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
	}

👉 실행결과

출력할 줄 수 : 3
*****
*****
*****

별찍기

✔ 한 줄에 별표 문자를 입력한 줄 수와 칸 수 만큼 출력 단, 줄 수와 칸 수가 일치하는 위치에는 줄 번호에 대한 정수가 출력

public void testFor8() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("출력할 줄 수 : ");
		int x = sc.nextInt();
		System.out.print("출력할 칸 수 : ");
		int y = sc.nextInt();
		
		for(int i = 1; i<= x; i++) {
			
			for(int j = 1; j <= y; j++) {
				
				if(i == j) {
					System.out.print(i);
				} else {
				System.out.print("*");
				}
			}
			
			System.out.println();
		}

👉 실행결과

출력할 줄 수 : 5
출력할 칸 수 : 5
1****
*2***
**3**
***4*
****5

while문

표현식
[초기식]
while(조건식){ //while문에는 조건식 하나가 들어간다
		.................
		[증감식 OR 분기문]; //while문 내부에 실행해줘야 한다.
}

로직순서

  • 조건식이 true일때 {}안 실행, false이 될 때까지 {}안에 내용 실행
  • {}실행이 끝나면 다시 조건식 확인 후 true면 재실행, false일때 중단
  • {}안에 조건을 벗어나게 할 연산이 있어야 함 (증감식, 분기문 등)

✔ 1~5까지 반복문 수행

public class B_while{ 
	public static void main(String[] args){ 
		int i = 1;
		while(i <= 5){ 
			System.out.println(i + “번째 반복문 수행중...”);
			i++; 
		} 
	} 
} 

👉 실행 결과

1번째 반복문 수행중...
2번째 반복문 수행중...
3번째 반복문 수행중...
4번째 반복문 수행중...
5번째 반복문 수행중...

✔ 문자열을 입력 받아 인덱스별로 문자를 출력

public void testWhile2() {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("문자열 입력 : ");
		String str = sc.next();
		
		int i = 0;
		while(i < str.length()) {
			char ch = str.charAt(i);
			
			System.out.println(i + " : " + ch);
			
			i++;
		}
	}

👉 실행 결과

문자열 입력 : apple
0 : a
1 : p
2 : p
3 : l
4 : e

//1부터 입력받은 수 까지의 합

public void testWhile3() {
		//1부터 입력받은 수 까지의 합
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 하나 입력 : ");
		int num = sc.nextInt();
		
		int i = 1;
		int sum = 0;
		
		while(i <= num) {
			sum += i;
			
			i++;
		}
		System.out.println("1부터 " + num + "까지의 합은 " + sum + "입니다.");
		
	}

👉 실행 결과

정수 하나 입력 : 5
1부터 5까지의 합은 15입니다.

구구단 2단부터 9단까지

public void testWhile4() {
		//구구단 2단부터 9단까지 출력
		System.out.println("===========");
		int dan = 2;
		int su = 1;
		
		while(true) {
			
			if(su == 10) {
				System.out.println("===========");
				dan++;
				su = 1;
				
			} else {
				System.out.println(dan * su);
				su++;
			}
			//System.out.println(dan * su);
			
			if(dan == 9 && su == 9) {
				System.out.println(dan * su);
				break;
			}
		}
		
//		while(dan < 10) {
//			while(su < 10) {
//				System.out.println(dan*su);
//				su++;
//			}
//			System.out.println();
//			dan++;
//		}
		
	}
  • 실행결과
  • =========== 2 4 6 8 10 12 14 16 18 =========== 3 6 9 12 15 18 21 24 27 =========== 4 8 12 16 20 24 28 32 36 =========== 5 10 15 20 25 30 35 40 45 =========== 6 12 18 24 30 36 42 48 54 =========== 7 14 21 28 35 42 49 56 63 =========== 8 16 24 32 40 48 56 64 72 =========== 9 18 27 36 45 54 63 72 81

줄 수와 칸 수를 스캐너로 입력받아 줄 수와 행 수만큼의 *을 출력하세요 단, 줄 수와 행 수가 같은 위치에는 *대신 줄의 번호를 출력하세요

public void testWhile5() {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("줄 수를 입력하세요 : ");
		int x = sc.nextInt();
		System.out.print("칸 수를 입력하세요 : ");
		int y = sc.nextInt();
		
		int i = 1;
		int j = 1;
		
		
		while(i <= x) {
			j = 1;
			while(j <= y) {
				
				if(i == j) {
					System.out.print(i);
				} else { 
					System.out.print("*");
				}
				
				j++;
				
			}
			System.out.println();
			
			//System.out.println("j는 " + j);
			i++;
		}
	}

실행결과

줄 수를 입력하세요 : 5
칸 수를 입력하세요 : 5
1****
*2***
**3**
***4*
****5

do ~ while문

do ~ while문 //명령어"~해라" do를 먼저 실행 후 while문 반복하는 형태
표현식
[초기식]
do {
	................. 
	[증감식 OR 분기문];
} while(조건식); 

로직순서

  • do{ }안의 내용 먼저 실행
  • 조건식 확인 후 true면 {}안의 내용 실행, false면 실행중단
  • {}안에 조건을 벗어나게 할 연산이 있어야 함 (증감식, 분기문 등)
  • while이 false여도 do는 실행된다. 그렇기 때문에 switch 문의 보기 나열해주는 형태가 do에서 자주 활용된다.

public class C_doWhile{ 
	public static void main(String[] args){ 
		int i = 1;
		int sum = 0;
		do{
			sum += i; 
			i++;
		}while(false); 
			System.out.println(“sum : ” + sum);
	}
} 

👉 실행결과

sum : 1

반복해서 문자열을 입력 받아 출력해주고 'exit'이란 단어를 만나면 실행 종료

public void testDoWhile() {
		Scanner sc = new Scanner(System.in);
		
		String str;		
		do {
			System.out.print("문자열을 하나 입력하세요 : ");
			str = sc.nextLine();
			
			System.out.println("str : " + str);
		} while(!str.equals("exit"));
		
		
	}

실행 결과

문자열을 하나 입력하세요 : anmut
str : anmut
문자열을 하나 입력하세요 : str
str : str
문자열을 하나 입력하세요 : exit
str : exit

분기문을 사용해 'exit'를 만나면 무한루프에서 빠져나가 '프로그램 종료'를 출력하고 멈춤

public void testDoWhile2() {
		Scanner sc = new Scanner(System.in);
		
		String str;		
		do {
			System.out.print("문자열을 하나 입력하세요 : ");
			str = sc.nextLine();
			
			System.out.println("str : " + str);
			
			if(str.equals("exit")) {
				break;
			}
		} while(true);
		
		System.out.println("프로그램 종료"); //if문이 없으면 무한루프때문에 구문 밖을 빠져나오지 못해서 에러가 뜬다
		
	}

실행결과

문자열을 하나 입력하세요 : jfid
str : jfid
문자열을 하나 입력하세요 : slif
str : slif
문자열을 하나 입력하세요 : exit
str : exit
프로그램 종료

분기문

  • break
  • 반복문을 빠져 가나는 구문 break구문이 있는 곳에서 부터 반복문을 빠져 나옴

public class A_break{ 
	public static void main(String[] args){ 
		Scanner sc = new Scanner(System.in);
		System.out.print(“숫자 하나를 입력하세요 : ”);
		int num = sc.nextInt(); 
		
		for(int i = 1; ; i++){ 
			sum += i;
			if(i > num){ break;
			}
		}
	System.out.println(“1부터 ” + num + “까지의 합은 ” + sum + “입니다.” );
	}
} 

👉 실행결과

숫자 하나를 입력하세요 : 10
1부터 10까지의 합은 55 입니다. 
  • continue
  • 반복문 실행시 continue 아래 부분은 실행하지 않고 반복문을 다시 실행 (for문의 경우 증감식으로 이동)

public class B_continue{ 
	public static void main(String[] args){ 
		Scanner sc = new Scanner(System.in);
		System.out.print(“숫자 하나를 입력하세요 : ”);
		int num = sc.nextInt(); 
		for(int i = 1; i <= num; i++){ 
			if(num % 2 != 0){ 
				continue;
			}
			sum += i;
		}
		System.out.println(“1부터 ” + num + “까지의 짝수의 합은 ” + sum + “입니다.” );
	}
} 

👉 실행결과

숫자 하나를 입력하세요 : 10
1부터 10까지의 짝수의 합은 30 입니다.

1~100까지 정수들의 합계 출력 단, 4의 배수는 빼고 계산

	public void testContinue() {
		
		int sum = 0;
		
		for(int i = 1; i <=100; i++) {
			
			if(i % 4 == 0) {
				continue;
			}
			sum += i;
		}
		System.out.println("sum : " + sum);
	}

실행결과

sum : 3750

구구단 홀수끼리의 연산만 출력

public void testContinue2() {
		
		for(int dan = 2; dan < 10; dan++) {
			System.out.println("=====" + dan + "=====");
			
			for(int su = 1; su < 10; su++) {
				
				if(dan % 2 == 0 || su % 2 == 0) {
					continue;
				}
				System.out.println(dan + " * " + su + " = " + (dan*su));
			}
			System.out.println();
		}
	}

실행결과

=====2=====

=====3=====
3 * 1 = 3
3 * 3 = 9
3 * 5 = 15
3 * 7 = 21
3 * 9 = 27

=====4=====

=====5=====
5 * 1 = 5
5 * 3 = 15
5 * 5 = 25
5 * 7 = 35
5 * 9 = 45

=====6=====

=====7=====
7 * 1 = 7
7 * 3 = 21
7 * 5 = 35
7 * 7 = 49
7 * 9 = 63

=====8=====

=====9=====
9 * 1 = 9
9 * 3 = 27
9 * 5 = 45
9 * 7 = 63
9 * 9 = 81

label:을 사용해 원하는 곳으로 빠져나가기

public void jumpBreakTest() {
		
		label:
		for(;;) {
			for(int i = 0; i < 10; i++) {
				System.out.println(i);
				
				if(i == 3) {
					break label;
				}
			}
		}
	}

실행결과

public void jumpBreakTest() {
		
		label:
		for(;;) {
			for(int i = 0; i < 10; i++) {
				System.out.println(i);
				
				if(i == 3) {
					break label;
				}
			}
		}
	}

 

반응형

'Programming > Java' 카테고리의 다른 글

[Java] 상속(Ingerit)  (0) 2022.03.07
[Java] 배열  (0) 2022.03.07
[Java] 조건문  (0) 2022.03.07
[Java] java.lang.Math  (0) 2022.03.07
[Java] 연산자  (0) 2022.03.07

댓글