Salted Caramel

[수업 4일차] 2021.08.05/ Scanner, 반복문(for,while,...),숫자맞추기게임 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 4일차] 2021.08.05/ Scanner, 반복문(for,while,...),숫자맞추기게임

꽃무늬라떼 2021. 8. 5. 17:11

Ex16

 

Scanner 클래스

- 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스

- Scanner :  nextint()  ,nextByte(), nextshort(), nextBoolean(), nextDouble(), nextFloat(), nextLong()

- next() //문자열을 받는 메서드 

- 문자뿐만 아니라 정수, 실수 등 다양한 자료형을 읽을 수 있다.

 

*System.in

-키보드와 연결된 자바의 표준 입력 스트림이다.

 

-자동완성: sca + ctrl + spacebar( java.util 패키지의 Scanner 클래스를 호출 할 수 있다.)

 


  • 04_Control-Ex16
package sist;

import java.util.Scanner;

public class Ex16 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("달(월)을 입력하세요. : ");
		
		int month =sc.nextInt();
		
		switch (month){
		case 1 :
		case 3 :
		case 5 :
		case 7 :
		case 8 :
		case 10 :
		case 12 :
			System.out.println("마지막날은 31일 입니다.~~~");
			break;

		case 2 :	
			System.out.println("마지막 날은 28일 입니다.~~~");
			break;
		case 4 :
		case 6 :
		case 9 :
		case 11 :
			System.out.println("마지막 날은 30일 입니다.~~~");
			break;
		}
		
		sc.close();
	}

}

 


  • 04_Control-Ex17

 

int menu = sc.nextInt(); 로 숫자값이 들어간 경우

 

다중 if~else

switch~case문

package sist;

import java.util.Scanner;

public class Ex17 {

	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		
		System.out.println("*** 메뉴를 선택하세요. ***");
		System.out.println("1. Pizza");
		System.out.println("2. 돈까스");
		System.out.println("3. 제육볶음");
		System.out.println("4. 김치찌개");
		System.out.println("5. 짜장면");
		System.out.println("위 메뉴 증 하나를 선택하세요. :");
		int menu = sc.nextInt();
		
		//다중 if~else 문으로 구현한 코드
		if(menu == 1) {
			System.out.println("Pizza 선택");
		}else if(menu == 2) {
			System.out.println("돈까스 선택");
		}else if(menu == 3) {
			System.out.println("제육볶음 선택");
		}else if(menu == 4) {
			System.out.println("김치찌개 선택");
		}else if(menu == 5) {
			System.out.println("짜장면 선택");
		}else {
			System.out.println("없는 메뉴입니다.~~~");
		}
		
		//switch~case 문으로 구현한 코드
		switch (menu) {
		case 1:
			System.out.println("Pizza 선택");
			break;
		case 2:
			System.out.println("돈까스 선택");
			break;
		case 3:
			System.out.println("제육볶음 선택");
			break;
		case 4:
			System.out.println("김치찌개 선택");
			break;
		case 5:
			System.out.println("짜장면 선택");
			break;
		case 6:
			System.out.println("없는 메뉴입니다.~~~");
			break;
		}
		sc.close();
	}

}

문자열을 받을때 , 숫자는 nextInt()

 

error

Resource leak: 'sc' is never closed

==> sc.close(); 을 switch문 } 뒤에 입력해줘야한다

 


  • 04_Control-Ex18

if(postion = "사장")   //(x) 문자 == 문자/ 숫자 = 숫자는 맞지만

 

 * 비교처리
 * 1. 숫자와 숫자 간의 비교( == )
 * 2. 문자와 문자 간의 비교( equals( )  )

프로젝트를 하게 되면 간혹 실수를 하는 때문에 주의하기

package sist;

import java.util.Scanner;

public class Ex18 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println
			("직급(사장/전무/부장/차장/과장/대리/사원) 중 하나의 직급을 입력하세요. :");
		
		String position = sc.next();
		
		//switch~case 문으로 구현한 코드
		switch(position) {
			case "사장" :
				System.out.println("사장의 급여는 1,000만원 입니다.");
				break;
			case "전무" :
				System.out.println("사장의 급여는 800만원 입니다.");
				break;
			case "부장" :
				System.out.println("사장의 급여는 700만원 입니다.");
				break;
			case "차장" :
				System.out.println("사장의 급여는 500만원 입니다.");
				break;
			case "과장" :
				System.out.println("사장의 급여는 400만원 입니다.");
				break;
			case "대리" :
				System.out.println("사장의 급여는 300만원 입니다.");
				break;
			case "사원" :
				System.out.println("사장의 급여는 200만원 입니다.");
				break;      //이후에 없기 때문에 break; 빼도 됨
				
		
		/*
		 * 비교처리
		 * 1. 숫자와 숫자 간의 비교( == )
		 * 2. 문자와 문자 간의 비교( equals() )		
		 */
				
		}
		if(position.equals("사장")) {
			System.out.println("사장의 급여는 1,000만원 입니다.");
		}else if(position.equals("전무")) {
			System.out.println("사장의 급여는 800만원 입니다.");	
		}else if(position.equals("부장")) {
			System.out.println("사장의 급여는 700만원 입니다.");	
		}else if(position.equals("차장")) {
			System.out.println("사장의 급여는 500만원 입니다.");	
		}else if(position.equals("과장")) {
			System.out.println("사장의 급여는 400만원 입니다.");	
		}else if(position.equals("대리")) {
			System.out.println("사장의 급여는 300만원 입니다.");	
		}else if(position.equals("사원")) {
			System.out.println("사장의 급여는 200만원 입니다.");	
		}else {
			System.out.println("없는 직급입니다.");
		}
		sc.close();
		
	}

}

  • 04_Control-Ex19
package sist;

import java.util.Scanner;

public class Ex19 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("이름을 입력하세요. : ");
		String name = sc.next();
		
		System.out.println("국어 점수 입력 : ");
		int kor = sc.nextInt();
		
		System.out.println("영어 점수 입력 : ");
		int eng = sc.nextInt();
		
		System.out.println("수학 점수 입력 : ");
		int mat = sc.nextInt();
		
		System.out.println("자바 점수 입력 : ");
		int java = sc.nextInt();
		
		
		//총점을 구하자.
		int tot = kor + eng + mat + java;
		
		//평균을 구하자.
		double avg = tot / 4.0;
		
		//학점을 구하자. 
		String grade;
		
		switch((int)(avg/10)) {
			case 10:
			case 9 :
				grade = "A학점";
				break;
			case 8 :
				grade = "B학점";
				break;
			case 7:
				grade = "C학점";
				break;
			case 6:
				grade = "D학점";
				break;
			default :
				grade = "F학점";
				
				
		}
				
		//성적 결과를 화면에 출력해 보자.
		System.out.println("이     름 : "+ name);		
		System.out.println("국어점수 : " +kor+ "점");
		System.out.println("영어점수 : " +eng+ "점");
		System.out.println("수학점수 : " +mat+ "점");
		System.out.println("자바점수 : " +java+ "점");
		System.out.println("총    점 : " +tot+ "점");
		System.out.printf("평    균 : %.2f점\n", avg);
		System.out.println("학    점 : " +grade);
	
		sc.close();
		
		
		

	}

}

  • 04_Control-Ex20

 

 

 * 2. 반복문
 * 		- 반복해서 실행할 때 사용하는 문장.
 * 		- 반복문의 종류 : while문, do~while문, for문
 */

/*
 * while 반복문
 * - 조건식을 비교하여 참인 경우 계속해서 반복 실행문을 실행하고,
 * 	 조건식이 거짓인 경우에는 반복문을 빠져 나가는 문장.
 * - while 반복문은 반복문의 횟수를 알 수 없는 경우에 많이 사용됨.
 * - 반복문에는 반드시 초기식, 조건식, 증감식이 존재해야 함.
 * 
 * 	 형식)
 * 			while(조건식) {
 * 				반복 실행문;
 * 			}
 */


/*
 * do~while 반복문
 * - 먼저 반복 실행문을 실행하고 조건식을 비교함.
 * 
 * 	 형식)
 * 			do {
 * 				반복 실행문;;
 * 			}while(조건식);

 

빨간 괄호안을 계속 반복하여 작성해야하는 수고를 덜어주는 반복문이 필요하다.

package sist;

/*
 * 2. 반복문
 * 		- 반복해서 실행할 때 사용하는 문장.
 * 		- 반복문의 종류 : while문, do~while문, for문
 */

/*
 * while 반복문
 * - 조건식을 비교하여 참인 경우 계속해서 반복 실행문을 실행하고,
 * 	 조건식이 거짓인 경우에는 반복문을 빠져 나가는 문장.
 * - while 반복문은 반복문의 횟수를 알 수 없는 경우에 많이 사용됨.
 * - 반복문에는 반드시 초기식, 조건식, 증감식이 존재해야 함.
 * 
 * 	 형식)
 * 			while(조건식) {
 * 				반복 실행문;
 * 			}
 */


/*
 * do~while 반복문
 * - 먼저 반복 실행문을 실행하고 조건식을 비교함.
 * 
 * 	 형식)
 * 			do {
 * 				반복 실행문;;
 * 			}while(조건식);
 */

public class Ex20 {

	public static void main(String[] args) {
		
		//순수하게 출력문을 이용하여 1 ~ 10까지 출력한 문장. 
		System.out.println("su >>> " +1);
		System.out.println("su >>> " +2);
		System.out.println("su >>> " +3);
		System.out.println("su >>> " +4);
		System.out.println("su >>> " +5);
		System.out.println("su >>> " +6);
		System.out.println("su >>> " +7);
		System.out.println("su >>> " +8);
		System.out.println("su >>> " +9);
		System.out.println("su >>> " +10);
		
		System.out.println();
		
		//while 반복문을 이용하여 1 ~ 10까지 출력해 보자.
		int num = 1;		//반복문에서의 초기식
		
		while(num >= 10) {	//반복문에서의 조건식
			System.out.println("num >> " + num);
			num++;			//반복문에서의 증감식
		}
		
		
		System.out.println();
		
		// do ~ while문을 이용하여 1 ~ 10까지 출력해 보자.
		
		int number = 1; //초기식
		
		do {
			System.out.println("number >>> " + number);
			number++;   //증감식
		}while(number >= 10);
		}
		
	}

젤 중요 별 100

 


  • 04_Control-Ex21
package sist;

public class Ex21 {

	public static void main(String[] args) {
		
		//while 반복문을 이용하여 1 ~ 10 까지의 합을 구해 보자.
		int sum = 0; 	//합을 저장하는 변수
		int su = 1;		//반복문에서의 초기값
		
		while(su <= 10)  {		//반복문에서의 조건식
			sum =sum + su;
			su++;				//반복문에서의 증감식
		}
		System.out.println("sum >>> " + sum);
	}

}

 


  • 04_Control-Ex22
package sist;

public class Ex22 {

	public static void main(String[] args) {
		
		// ABCDEFG...XYZ 까지 문자를 출력해 보자.
		char alpha = 'A';
		
		while(alpha <= 'Z')  {
			System.out.print(alpha);
			alpha++;
			
		}
		System.out.println();
		System.out.println();
		
		//ZYXW...DCBA까지 문자를 출력해 보자.
		char alpha1 = 'Z';
			
		while(alpha1 >= 'A') {
			System.out.print(alpha1);
			alpha1--;
		}
	}

}

차이

while 반복문

 do~while 반복문

 

int num = 1; //반복문에서의 초기식

while(num <= 10) { //반복문에서의 조건식
System.out.println("num >> " + num);
num++; //반복문에서의 증감식
}

//거짓이기 때문에 처음무터 실행이 되지 않음

 


  • 04_Control-Ex23

int number = 1; //초기식


do {
System.out.println("number >>> " + number);
number++;   //증감식
}while(number >= 10);

//1번은 실행이됨

 

 

package sist;

// 1 ~ 100까지의 홀수의 합과 짝수의 합을 구해 보자.

public class Ex23 {

	public static void main(String[] args) {
		
		int su = 1; //반복문에서의 초기식
		
		// 홀수의 합 (누적)변수, 짝수의 합 변수
		int odd = 0, even = 0;
		
		while(su <= 100)  {
			if(su%2 == 1) {
				odd = odd + su;
			}else {
				even = even + su;
				
			}
			
			su++;
		}  //while 반복문 end

		System.out.println("홀수의 합 >>> " + odd);
		System.out.println("짝수의 합 >>> " + even);
		
	}

}

 


 

' ' : 하나의 문자를 입력

ex) 'J' (o)

     'java' (x) "java"(o)

 


  • 04_Control-Ex24

package sist;

import javax.swing.JOptionPane;

/*
 * [문제] 키보드로 입력을 받은 수까지의 홀수의 합과 
 * 		 짝수의 합을 구하여 화면에 출력해 보세요.
 * 		(단, while 반복문을 이용하여 처리)
 * 
 */

public class Ex24 {

	public static void main(String[] args) {
		
		int su =
		Integer.parseInt(JOptionPane.showInputDialog("수를 입력하세요."));
		
		int odd = 0, even = 0;
		
		while(0 <= su) {
			if(su%2 == 1) {
				odd = odd + su;
			}else {
				even = even + su;
		}
		
				
		su--;		

	}

		System.out.println("홀수의 합 >>> " + odd);
		System.out.println("짝수의 합 >>> " + even);
		
}
}======

 


  • 04_Control-Ex25

 

package sist;

import java.util.Scanner;

// 별을 찍어 보자.

public class Ex25 {

	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		
		System.out.print("별의 최대 갯수를 입력하세요. :");

		int starCount = sc.nextInt();
		
		System.out.println();
		
		if(starCount > 0) {
			int count = 1;
			
			while(count <= starCount) {
				System.out.print("*");
				count++;
			}
		}
		sc.close();
	}

}

  • 04_Control-Ex26
package sist;

import java.util.Scanner;

/*
 * 1 ~ 100 사이의 정수 중에서 
 * 키보드로 5개의 정수를 입력 받아서
 * 5개의 정수 중에서 최댓값을 화면에 출력해 보세요.
 * 예) 17, 34, 8, 93, 77
 */

public class Ex26 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int max = 0; 	//최대값 변수   //max변수에는 가장 작은값
		
		int temp, su = 1;
		while(su <= 5) {
			System.out.println(su + "번쨰 정수 입력: ");
			temp = sc.nextInt();
			
			if(temp > max) {
				max = temp;
			}
			su++;
			
		}// while문 end
		
		System.out.println("최댓값 >>> " + max);
		
		sc.close();
		
	}

}


  • 04_Control-Ex27

 

숫자 맞추기 게임

 

 

컴퓨터가 생각한 숫자를 추리해서 맞춰나가는 게임

숫자가 크다 작다를 말해서 , 이 숫자보다 커 작아라는 멘트를 날릴 수 있게한다.

몇번만에 맞춰나가는지도 알 수 있다.

 

 

while(true) ==> 무한반복

package sist;

import java.util.Scanner;

//숫자 맞추기 게임


public class Ex27 {

	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		
		System.out.println("*** 숫자 맞추기 게임 ***");
		
		int num = (int)(Math.random()*99)+1;
		
		System.out.println("1 ~ 99 사이의 숫자 중에서 하나의 숫자를 맞추세요.");
		
		int count = 0; // 몇 번 만에 맞추는지 카운트하는 변수
		
		int no = 0;    //키보로 입력 받은 내가 선택한 숫자.
		
	    while(no != num) {
	    	System.out.println("어떤 숫자일까요? : ");
	    	no = sc.nextInt();
	    	
	    	if(no > num) {
	    		System.out.println("더 작은 숫자입니다.");
	    		
	    	}else if(no < num) {
	    		System.out.println("더 큰 숫자입니다.");
	    		
	    	}
	    	System.out.println("::::::::::::::::::::::");
	    	count++;
	    }
	    System.out.println("축하하니다. 정답입니다. !!!");
	    System.out.println("정답 숫자 >>> " +num);
	    System.out.println("정답 소요 횟수 >>> " +count);
	    
	sc.close();    
	}
	
}

 


  • 04_Control-Ex28

                                           ★for 반복문★                                          

 * for 반복문(★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★젤 중요)
 * - 변수의 값을 이용하여 반복 실행하는 명령문.
 * - 일정 횟수에 대한 반복을 구현할 때 효율적으로 사용되는 반복문.
 * 	  즉, 반복문의 횟수를 알고 있는 경우에는 자주 사용됨.
 * 
 * 	 형식)
 * 			for(초기식; 조건식; 증감식) {
 * 				반복 실행문;
 * 			}
 * 
 * [for 반복문 실행 순서
 * 1. 초기식 : 처음에 한번만 실행됨(변수 선언)
 * 2. 조건식 : 조건이 참이면 반복, 거짓이면 탈출(exit)
 * 3. 실행문 : 조건이 참일 때 반복 대상인 반복 실행문이 실행됨.
 * 4. 증감식 : 변수를 대상으로 증가(++) 또는 감소(--)
package sist;

/*
 * for 반복문(★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★젤 중요)
 * - 변수의 값을 이용하여 반복 실행하는 명령문.
 * - 일정 횟수에 대한 반복을 구현할 때 효율적으로 사용되는 반복문.
 * 	  즉, 반복문의 횟수를 알고 있는 경우에는 자주 사용됨.
 * 
 * 	 형식)
 * 			for(초기식; 조건식; 증감식) {
 * 				반복 실행문;
 * 			}
 * 
 * [for 반복문 실행 순서
 * 1. 초기식 : 처음에 한번만 실행됨(변수 선언)
 * 2. 조건식 : 조건이 참이면 반복, 거짓이면 탈출(exit)
 * 3. 실행문 : 조건이 참일 때 반복 대상인 반복 실행문이 실행됨.
 * 4. 증감식 : 변수를 대상으로 증가(++) 또는 감소(--)
 */

public class Ex28 {

	public static void main(String[] args) {
		
		//while 반복문을 이용하여 1 ~ 10까지 출력해 보자.
				int num = 1;		//반복문에서의 초기식
				
				while(num <= 10) {	//반복문에서의 조건식
					System.out.println("num >>> " + num);
					num++;			//반복문에서의 증감식
				}
				
				
				System.out.println();
				
				//for 반복문을 이용하여 1 ~ 10까지 출력해 보자.
				for(int su=1; su<=10; su++)  {
					System.out.println("su >>> " + su);
				}
				

	}

}

 


  • 04_Control-Ex29
package sist;


/*  Ex23과 비교
 * [문제] for반복문을 이용하여 1 ~ 100까지의 
 * 		 홀수의 합과 짝수의 합을 구하여 화면에 보여주세요.
 */

public class Ex29 {

	public static void main(String[] args) {

		int odd = 0, even = 0;
		
		for(int su = 1; su <= 100; su++ ) {
			
			if(su%2 == 1) {
				odd += su; //odd = odd + su;
			}else {
				even += su; // even = even + su;
			}
		}	//for 반복문 end
			System.out.println("홀수의 합 >>> " + odd);
			System.out.println("짝수의 합 >>> " + even);

	}

}

  • 04_Control-Ex30
package sist;

import java.util.Scanner;

/*
 * 신장별 표준 체중 대응표를 만들어 보자.
 * 표시할 신장의 범위(시작값 / 종료값/ 증가값)는 정수로 
 * 키보드로 입력을 받을 예정.
 * - 표준 체중을 구하는 공식 : (신장 - 100) * 0.9
 */

public class Ex30 {

	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		
		System.out.print("몇 cm부터 표시할까요? : ");
		int start = sc.nextInt();
		
		System.out.print("몇 cm까지 표시할까요? :");
		
		int end = sc.nextInt();
		
		System.out.print("몇 cm 단위로 표시할까요? : ");
		
		int step = sc.nextInt();
		
		System.out.println("신  장\t표준체중");
		
		System.out.println("=======================");
		
		for(int i=start; i<=end; i=i+step) {
			System.out.println(i + "cm\t"+ ((i-100)*0.9)+ "kg");
			
		}
		sc.close();

	}

}

  • 04_Control-Ex31

다중 for 반복문                                                                                                  

 * 다중 for 반복문
 * - 반복문 안에 또 다른 반복문을 포함하는 문장.
 * - 반복문이 종축되어 사용되는 경우.
 * - 외부 반복문과 내부 반복문 간의 변수의 갓 변화에 유의해야 함.  - 중요함.
 * 
 * 		형식)
 * 			for(초기식1; 조건식1; 증감식1) {
 *				반복 실행문1;
 *				for(초기식2; 조건식2; 증감식2)  {
 *					반복 실행문2 |
 *				}
 *			}
package sist;

/*
 * 다중 for 반복문
 * - 반복문 안에 또 다른 반복문을 포함하는 문장.
 * - 반복문이 종축되어 사용되는 경우.
 * - 외부 반복문과 내부 반복문 간의 변수의 갓 변화에 유의해야 함.  - 중요함.
 * 
 * 		형식)
 * 			for(초기식1; 조건식1; 증감식1) {
 *				반복 실행문1;
 *				for(초기식2; 조건식2; 증감식2)  {
 *					반복 실행문2 |
 *				}
 *			}
 */

public class Ex31 {

	public static void main(String[] args) {

		for(int i=1; i<=3; i++) {
			for(int j=1; j<=4; j++) {
				System.out.println("["+i+","+j+"]");
			}	//안쪽 for문 end
			System.out.println(":::::::::::::::::::::");
		}	//바깥쪽 for문 end
		
	}

}

  • 04_Control-Ex32

 

package sist;

//다중 for문 이용하여 구구단을 화면에 출력해 ㅗ자.

public class Ex32 {

	public static void main(String[] args) {
		
		for(int i =2; i<=9; i++) {	//구구단에서의 단
			
			System.out.println("*** "+ i + "단 ***");
			for(int j=1; j<=9; j++) {
				
				System.out.println(i + " * " + j + " = " + (i * j));
			}
			System.out.println();
		}
		
	}

}

 

package sist;

//다중 for문 이용하여 구구단을 화면에 출력해 ㅗ자.

public class Ex32 {

	public static void main(String[] args) {
		
		for(int i =2; i<=9; i++) {	//구구단에서의 단
			
			System.out.println("*** "+ i + "단 ***");
			for(int j=1; j<=9; j++) {
				
				System.out.printf("%d * %d = %2d\n", i, j, (i * j));
			}
			System.out.println();
		}
		
	}

}

 

2d: 자리수를 두자리를 잡으라는 말로 숫자의 경우 오른쪽부터 채우고 왼쪽은 비어있게 출력이 됨

 

 

 

 


  • 04_Control-Ex33
package sist;

/*
 * 아래와 같이 화면에 출력을 해 보자.
 * 
 * *****
 * *****
 * *****
 * *****
 * 
 * 
 * *
 * **
 * ***
 * ****
 * *****
 * 
 * *****
 * ****
 * ***
 * **
 * *
 * 
 * 
 * 
 */

public class Ex33 {


	public static void main(String[] args) {
		
		for(int i=1; i<=4; i++) {  //행
			for(int j=1; j<6; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

		System.out.println();
		System.out.println();
		
		for(int i=1; i<6; i++) { //행
			for(int j=1; j<=i; j++) {
				System.out.print("*");
				
			}
			System.out.println();
		}
		System.out.println();
		System.out.println();
		
		for(int i=5; i>=1; i--) {
			for(int j=1; j<=i; j++) {
				System.out.print("*");
				
			}
			System.out.println();
			}
		}
		
	}

 

지역변수

int i, j ;  //전역변수