코딩 기록들

[Java Programming] 3.1 실행흐름 제어 - 조건문 (while, for) 본문

Java

[Java Programming] 3.1 실행흐름 제어 - 조건문 (while, for)

코딩펭귄 2024. 1. 19. 13:34

while : 조건에 따라 반복할 때

for : 반복횟수를 알고싶을 때

 

whlie

while(조건) {
    반복될 코드 블럭
}

- 잘 안씀 (잘못쓰면 application이 죽어버림)

- 설계가 잘된 솔루션은 wihle 안씀

- 조건 : 비교연산자, 논리연산자, 불린값 자체가 들어갈수 있음

- { } 안의 내용 반복하는것 -> 언제까지 ? (조건)의 값이 false가 될때까지

public static void main(String[] args) {
    int i = 0;
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
    System.out.println(++i);
}

//이렇게 반복되는 코드를 아래처럼 while문을 사용해서 줄일수있음

public static void main(String[] args) {
    int i = 0;
    while(i < 10) {
        System.out.println(++i);
    }
}

 

while반복문은 무한반복을 위해 사용됨

- 종료조건이 없는 무한반복 예제 

- Ctrl + shift + esc -> 작업관리자 확인하면 CPU가 엄청 올라가있는것을 확인할 수 있음

public static void main(String[] args) {
    int i = 0;
    while(true) { // 반복 조건이 true이므로 무한히 반복
        System.out.println(++i);
    }
}

 

 

업다운게임 - while문 사용해서 만들어보기

Scanner : 콘솔에 입력한 값을 변수로 사용할 수 있도록 해주는 용도

 

변수선언

public static void main(String[] args) {
		// Ctrl + shift + o -> import 단축키 
		
		// 키보드의 입력을 변수로 받아올수있도록 도와주는 코드
		Scanner keyboard = new Scanner(System.in);
		
		//난수 생성(0.0000000)
		double randomNumber = Math.random();
		
		//난수를 0~99 사이의 정수로 변환
		int answer = (int) (randomNumber * 100);
		
		//사용자가 입력하는 값을 할당받을 변수 선언
		int value = 0;

 

while문을 사용하지 않았을때 -> 숫자 한번만 입력하고 Up! / Down! / 정답입니다 중 하나만 출력됨

		// 사용자에게 숫자를 입력하라고 알려준다
		System.out.println("숫자를 입력하세요.");
		
		//사용자가 keyboard변수를 이용해 숫자를 입력한 후
		// enter를 입력하면 value변수에 값이 할당됨
		value = keyboard.nextInt();
		
		//컴퓨터가 만든 난수와 사용자가입력한 숫자가 일치하는지 확인하고
		//일치한다면 '정답입니다' 출력
		if(answer == value) {
			System.out.println("정답입니다");
		}
		//컴퓨터가만든 난수와 사용자가입력한숫자 비교했을때
		//사용자가입력한값이 더 작다면 'Up!" 출력		
		else if (answer > value) {
			System.out.println("Up!");
		}
		// 컴퓨터가 만든 난수와 사용자입력숫자 비교시
		//일치하지도않고, 사용자가 입력한값이 더 작지 않다면
		//"Down!" 출력
		else {
			System.out.println("Down!");
		}

 

위 코드를 while문을 써서 무한반복되게 만들면

		while(true) {
			System.out.println("숫자를 입력하세요.");
			//사용자가 keyboard변수를 이용해 숫자를 입력한 후
			// enter를 입력하면 value변수에 값이 할당됨
			value = keyboard.nextInt();
			
			//컴퓨터가 만든 난수와 사용자가입력한 숫자가 일치하는지 확인하고
			//일치한다면 '정답입니다' 출력
			if(answer == value) {
				System.out.println("정답입니다");
				break; //무한반복 종료시킴
			}
			//컴퓨터가만든 난수와 사용자가입력한숫자 비교했을때
			//사용자가입력한값이 더 작다면 'Up!" 출력		
			else if (answer > value) {
				System.out.println("Up!");
			}
			// 컴퓨터가 만든 난수와 사용자입력숫자 비교시
			//일치하지도않고, 사용자가 입력한값이 더 작지 않다면
			//"Down!" 출력
			else {
				System.out.println("Down!");
			}
		}

while문을 사용한 Up & Down 게임 Flow Diagram

 

 


For

while  vs  for

while : 무한반복 (반복의 경계가 없음. 끝날지점 알 수 없음)

for : 범위반복 (반복의 범위가 정해져있음(지정한 범위))

- for문작성시 주의할점 : 초기화식에서 루프카운트 변수 선언할때 부동소수점 타입을 사용하지 말것

for(1️⃣초기화식; 2️⃣반복조건; 4️⃣증감식) {
        3️⃣반복할 코드
}

1️⃣초기화식 제일 먼저 실행됨

2️⃣반복조건 평가 후 :  true 라면 -> 3️⃣반복할 코드 실행시킴. 실행문 모두 실행되면-> 4️⃣증감식 실행 -> 2️⃣반복조건 평가

                                    flase 라면: for내부 실행하지않고 끝남

 

 

public static void main(String[] args) {
	// for안의 변수 i는 for의{} 범위에서만 사용할수있다
    for(int i = 1; i < 11; i++) {  // i<11 이 true 일동안 {}코드블록 실행
        System.out.println(i);
    }
}

초기값 : 변수의 정의와 할당 (i값은 1부터 시작)

반복조건 : 비교연산자 (i값이 11보다 작을 동안 반복)

증감식 : 단항연산자 (i값은 반복할때마다 1씩 증가)

 

0부터 100중 짝수만 출력하는 예제
// 증감식을 2씩 증가시키기 (i=0으로 시작 -> 이런식으로는 안 푼다
	for (int i = 0; i < 101; i += 2) {
		if (i>0) {
			System.out.println(i);
		}
	}
		
//-> 이런식으로 풀것
	for(int i = 1; i < 101; i++) {
		if(i % 2 == 0) {
			System.out.println(i);
		}
	}

 

구구단 예제
//구구단 2~9 반복
for(int i = 2; i < 10; i++) {
			
	//구구단의 배수를 사용하기 위해 반복 : 1~9까지 반복
	for(int j = 1; j < 9; j++) {
				
		// 2 X 1 = 2 형태로 나오도록 출력
		System.out.println( i + "X" + j + "=" + (i * j));
	}
}

 

1부터 100까지 합 구해서 출력
int one2Hun = 0;
for( int i = 1; i < 101; i++) {
	one2Hun += i;
}
System.out.println(one2Hun);

 

1부터 100 중 홀수의 합 구해서 출력

방법1 (증감식에 i++가 아닌 다른 식(ex, i+= 2)이 들어가는 형태는 안씀)

int oddOne2Hun = 0;
for( int i = 1; i < 101; i+= 2) {
	oddOne2Hun += i;
}
System.out.println(oddOne2Hun);

 

방법2 (이렇게 i++ 하는 방법으로 사용하는것이 바람직함)

int oddOne2Hun1 = 0;
for(int i = 1; i < 100; i ++) {
	if (i % 2 == 1) {
		oddOne2Hun1 += i;
	}
}
System.out.println(oddOne2Hun1);

 

1부터 100중 3,5,6 모두의 배수만 출력
for( int i = 1; i < 101; i++) {
	if (i%3 == 0 && i%6 == 0 && i%5 == 0) { // 논리식은 한줄에 많이써도 됨
		System.out.println(i);
	}
}

 

* 1개부터 5개까지 줄바꿔서 나오게 출력

for( int i = 1; i < 6; i++) {
	for ( int j = 1; j <= i; j++) {
		System.out.print("*"); // 옆에 나란히 *** 출력하도록
	}
	System.out.println();  // enter 치는(줄바꿈) 용도
}

 

print 관련 코드

* 출력 후 엔터

System.out.println("*");

 

* 출력 (이후 엔터 없음, 다음 입력값은 오른쪽에  * 이 붙게 됨)

System.out.print("*");

 

엔터치는(한줄 띄는)  용도

System.out.println();