자바 학습 & 복습 5일차

728x90

while 반복문

 

import java.util.Scanner;

import javax.swing.text.html.HTMLEditorKit.Parser;

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		//while 반복문
		int i=0; //for문과 달리 미리 변수 선언함
		while(i<=10) { // 변수 선언 후 for문과 같이 조건식 괄호안에 선언
			System.out.println(i);
			i++;//조건이 항상 참일경우에 무한루프가 걸리므로 i++로 조건이 거짓이 될 수 있도록 추가 조건 선언
		} //블록 안에 추가조건을 선언해서 실행되도록 만들어야함
		//for문과 while문은 언제든지 변환 가능
		
		//for문으로 변환 시 보기 매우 간결함, 상황에 맞춰 while for 문 사용
		for(;i<=10;i++) {
			System.out.println(i);
		}
		
		//sum의 변수가 언제 100을 넘는지 i변수를 통해서 확인하는 예시
		//int i는 선언한 것 처럼 0로 가정
		int sum = 0;
		while(sum<=100) {
			System.out.println(i+" = "+sum);
			sum+=++i; //++를 전에 선언해서 미리 변수에 0을 대입하고 도출
			//이 조건식을 마지막에 넣어줘야 105를 미리 계산하여 식에서 제외시킬 수 있음
		}
		
		
		//while문 예시 심화 - 입력받은 숫자의 합을 구하는 식
		int num = 0, sum2 = 0;
		Scanner scanner = new Scanner(System.in);
		System.out.println("숫자를 입력하세요");
		String input = scanner.nextLine();//입력을 "12345"로 문자열로 받고
		num = Integer.parseInt(input);//문자열을 int로 바꿔주는 식
		
		while(num!=0) {
			sum2+=num%10; //sum2(0) = sum2+(num%10)을 지정해서 끝의 자리를 더해감
			num=num/10;//num(넣은 숫자)를 0을 만들어야 식이 멈추니까 10으로 계속 나눠서 0을 만듬
			System.out.println(num+": "+sum2);
          
		}
 }

 

do { } while ( ); 반복문

import java.util.Scanner;

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		
		//do - while 문 
		//미리 조건을 걸어놓고 시작하는 while과 달리 실행할 블럭을 앞에 써놓기 때문에 무조건 1번은 실행됨
		//while(){} 이라면 do while은 {}while()이런 식
		//사용자 입력을 받을때 유용함 - 1~100까지 숫자 등을 입력할 때 미리 조건으로(do) 필터링
		//마지막 조건식 while(); 세미콜론 잊지 말 것
		
		//do-while 예제 = Math.random 정수를 사용해서 랜덤숫자를 맞추는 문제
		int num=0, ran=0;
		ran=(int)(Math.random()*10)+1; // random 10까지의 숫자를 Math.random함수로 설정
		//do 안에 이 random함수를 넣어버리면 숫자가 계속 바뀌므로 꼭!!! 밖에 빼줘야됨
		do { // do를 사용해서 미리 조건식을 넣어놓고 시작

			System.out.println("1~10 숫자 입력"); //do 안에 넣어줘야 println문이 출력됨
			Scanner scanner = new Scanner(System.in);
			String input=scanner.nextLine();
			num=Integer.parseInt(input);
		
			if(num>10) {
				System.out.println("10보다 작은수 ㄱ");
			//위에서 부터 아래로 실행되기 때문에 숫자 제한조건은 위에다 작성하는 것이 옳음
			}
			else if(num<1) {
				System.out.println("0보다 큰 수 ㄱ");
			}
			else if(ran>num) {
				System.out.println("큰 수 입력"); //if & else if 문을 사용해서 랜덤숫자 힌트를 줌
			}
			else if(ran<num) {
				System.out.println("작은 수 입력");
			}
			
		} while(ran!=num); // 입력숫자가 맞지 않아야 위의 조건문이 반복이 되므로 !=으로 설정
		//만약 입력숫자가 랜덤숫자와 동일시될시 반복문이 종료되고 아래의 print문 실행
		System.out.println("정답입니다");
	
	}	
}

 

continue & break 문

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		//break 문 - true인 반복문을 중지시킴
		//for문은 for(;;)을 써서 true를 따로 안써주어도 되지만 while은 while(true)를 꼭 써줘야됨
		
		//예시 = sum과 i를 각각 0으로 배정하고 i가 1씩 늘어날때 sum이 100 이상이 되면 멈추는 반복문
		int sum = 0, i = 0;
		while(sum<100) { // sum이 100 미만인 동안 반복
			if(sum>=100) { // 만약 100 이상을 넘어버리면
				break; // break문으로 중지	
			}
			++i; //중지될때동안 i에 1씩 계속 합산
			sum=i; //sum에 i값을 계속 대입 = 100
		}
		System.out.println("sum: "+sum+" i: "+i);
	
		//continue문 - 자신의 포함된 반복문의 끝으로 이동 = 다음 반복으로 넘어감 > 포함된 블럭 다음칸으로 넘어감
		//전체반복 중에서 특정 조건시 반복을 건너뛸때 유용

		//예시 - 1~10까지 숫자 반복 시 2의배수는 건너뛰기
	
		for(int I = 0 ; I<=10 ; I++) { //1~10까지 반복
			if((I%2)==0) { //1~10에서 2의배수 숫자가 나오면
				continue; //현재 블록안의 조건식을 무시하고 아래 조건식 실행 후 다시 위의 초기 조건식으로 돌아감
			}
			System.out.println(I);
			System.out.println("2의배수"); //이곳으로 건너가짐
		}
		
	}	
}

 

continue & break 응용예시 (1~3번 메뉴 선택)

import java.util.Scanner;

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		//1~3번의 메뉴 선택지 + 0번을 누르면 종료되는 프로그램
		//break, continue, if문 활용
		
		Scanner scanner = new Scanner(System.in);
		int i = 10;
		System.out.println("0~3번 중 메뉴를 고르세요");
		System.out.println("1번: 카라멜 라떼");
		System.out.println("2번: 아아");
		System.out.println("3번: 바아라");
		System.out.println("0번을 누르시면 종료됩니다"); //메뉴를 먼저 나열

		
		while(!(0<i && i<4)) {
		System.out.println("원하시는 번호를 입력해주세요");

		String input=scanner.nextLine();
		i=Integer.parseInt(input);
		
		if(i==1) {
			System.out.println("카라멜 라떼 선택하셨습니다");
		}
		else if(i==2) {
			System.out.println("아아 선택하셨습니다");
		}
		else if(i==3) {
			System.out.println("바아라 선택하셨습니다");
		}
		else if(i==0) {
			System.out.println("프로그램을 종료합니다");
			break;
		}
		else {
			System.out.println("잘못 누르셨습니다. 초기화면으로 돌아갑니다");
			continue;
		}
		}
		if(i==0) {
			System.out.print("");
		}
		else {
			System.out.println("고르신 번호는 "+i+"입니다");
		}
	}
}

 

이름 지정 break 문

import java.util.Scanner;

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		//이름 붙은 반복문 = 상황에 따라 하나 이상의 반복문을 벗어날 때
		//반복문에 이름을 붙여서 break에 지정해주면 그 지정 반복문 벗어날 수 있음
		Loop: for(int i = 1; i<=7; i++) { //이 반복문을 Loop으로 지정
			for(int j = 1; j<=i; j++) {
				System.out.print("*");
				if(j==3) { //j=3이될때, 즉 별이 3개 찍힐때 Loop반복문에서 전체 탈출
					System.out.println("");
					break Loop;
				}
			}
			System.out.println("");
		} System.out.println("Loop break 탈출"); //반복문의 다음 블록으로 break
	}
}

 

이름 지정 break 문 & for & while 심화 예제

import java.util.Scanner;

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		//1~3번의 메뉴 선택지 + 0번을 누르면 종료되는 프로그램
		//break, continue, if문 활용
		
		Scanner scanner = new Scanner(System.in);
		int i = 10;
		System.out.println("0~3번 중 메뉴를 고르세요");
		System.out.println("1번: 카라멜 라떼");
		System.out.println("2번: 아아");
		System.out.println("3번: 바아라");
		System.out.println("0번을 누르시면 종료됩니다"); //메뉴를 먼저 나열

		
		loop: while(!(0<i && i<4)) {
		System.out.println("원하시는 번호를 입력해주세요");

		String input=scanner.nextLine();
		i=Integer.parseInt(input);
		
		if(i==1) {
			System.out.println("카라멜 라떼 선택하셨습니다");
		}
		else if(i==2) {
			System.out.println("아아 선택하셨습니다");
		}
		else if(i==3) {
			System.out.println("바아라 선택하셨습니다");
		}
		else if(i==0) {
			System.out.println("프로그램을 종료합니다");
			break;
		}
		else if(!(0<i && i<4)) {
			System.out.println("잘못 누르셨습니다. 초기화면으로 돌아갑니다");
			continue;
			}
			else {
				System.out.println("고르신 음료번호는 "+i+"입니다");
			}
			System.out.println("--------------");

			//-----------------------------------
			
			loop2: for(;;) {
				int dn = 0, caramel = 4500, ice = 3000, vanila = 4200;
				//각각 가격지정
									
				System.out.println("음료 주문 총 수량을 입력해주세요");
				System.out.println("결제 취소버튼 = 100 입력");
				
				Scanner scanner2 = new Scanner(System.in);
				String st = scanner2.nextLine();
				dn=Integer.parseInt(st);// 새로운 반복문 for에 재입력 scanner를 넣어줌
				
				if(dn==100) {
					System.out.println("결제를 취소하고 프로그램을 종료합니다");
					break;
				}
				else if(i==1) {
					System.out.println("고르신 카라멜 라떼의 총 가격은 "+caramel*dn+"(총"+dn+"잔 x "+caramel+")원 입니다");
					break; //수량까지 지정하고 break문으로 조건식 종료
				}
				else if(i==2) {
					System.out.println("고르신 아아의 총 가격은 "+ice*dn+"(총"+dn+"잔 x "+ice+")원 입니다");
					break;
				}
				else if(i==3) {
					System.out.println("고르신 바아라의 총 가격은 "+vanila*dn+"(총"+dn+"잔 x "+vanila+")원 입니다");
					break;
				}
			}
		}
	}
}

결과물

0~3번 중 메뉴를 고르세요
1번: 카라멜 라떼
2번: 아아
3번: 바아라
0번을 누르시면 종료됩니다
원하시는 번호를 입력해주세요
2
아아 선택하셨습니다
--------------
음료 주문 총 수량을 입력해주세요
결제 취소버튼 = 100 입력
100
결제를 취소하고 프로그램을 종료합니다

or

--------------

3
고르신 카라멜 라떼의 총 가격은 13500(총3잔 x 4500)원 입니다

 

728x90