스마트 인재개발원/명품자바

2021-04-28 명품자바 Chapter 2 실습예제(자바페스티벌)

1. Scanner 클래스를 이용하여 입력받은 원화 값을 달러로 바꾸어
다음 예시와 같이 출력하는 프로그램을 작성하라. 
($1=1100원으로 가정)


package Chapter02;

import java.util.Scanner;

public class 실습문제01_원화달러 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double input_num = 0;
		System.out.print("원화를 입력하세요(단위 원) >> ");
		input_num = sc.nextFloat();
		
		//1달러는 = 1100원
		
		double dollar = 0;
		dollar = input_num/1100;
		System.out.println((int)input_num + "원은 " + dollar +"$입니다" );
	}

}

2. Scanner 클래스를 이용하여 2자리의 정수(10~99사이)를 입력받고,
십의 자리와 1의 자리가 같은 지 판별하여 출력하는 프로그램을 작성하라.

package Chapter02;

import java.util.Scanner;

public class 실습문제02_10_99정수 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("2자리수 정수를 입력하세요>>");
		int num = sc.nextInt();
		
		if(num/10 == num%10) {
			System.out.println("Yes! 10의 자리와 1의 자리가 같습니다.");
			
			
		}else
		{
			System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
			
		}
	}

}

3. Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제03_동전교환문제 {
	public static void main(String[] args) {
		
		//금액 입력받기 
		Scanner sc = new Scanner(System.in);
		System.out.print("금액을 입력하시오>>");
		int amount = sc.nextInt();
		
		int o_man_won = amount/50000;
		int man_won = amount%50000/10000;
		int chun_won = amount%50000%10000/1000;
		int back_won = amount%50000%10000%1000/100;
		int o_sip_won = amount%50000%10000%1000%100/50;
		int sip_won = amount%50000%10000%1000%100%50/10;
		int il_won = amount%50000%10000%1000%100%50%10;
		
		
		System.out.println("오만원권 " + o_man_won + "매");
		System.out.println("만원권 " + man_won + "매");
		System.out.println("천원권 " + chun_won + "매");
		System.out.println("백원 " + back_won + "매");
		System.out.println("오십원 " + o_sip_won + "매");
		System.out.println("십원 " + sip_won + "매");
		System.out.println("일원 " + il_won + "매");
		
		
	}
}

4. Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의하라.정수 3개 입력>>20 100 33
중간 값은 33

 

package Chapter02;

import java.util.Scanner;

public class 실습문제04_중간크기수 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		//연속된 값 입력은 디폴트값은 스페이스
		System.out.print("정수 3개를 입력하시오>>");
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		int middle_num = 0;
		
		if(num1>=num2 && num2>=num3 || num3>=num2 && num2>=num1) {
			System.out.println(num2);
		}
		else if(num2>=num1 && num1>=num3 || num3>=num1 && num1>=num2)
		{
			System.out.println(num1);
		}else
		{
			System.out.println(num3);
		}
	}
}

5. Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라. 삼각형이 되려면 두변의 합이 다른 한 변의 합보다 커야 한다.정수 3개를 입력하시오>>4 3 5
삼각형이 됩니다.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제05_삼각형의길이 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		//연속된 값 입력은 디폴트값은 스페이스
		System.out.print("정수 3개를 입력하시오>>");
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		
		if(num1+num2>num3 || num2+num3 >num1 || num1+num3>num2 ) {
			System.out.println("삼각형이 됩니다.");
		}else {
			System.out.println("삼각형이 안됩니다.");
		}
		
	}

}

6. 369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를 들면, 키보드로 입력된 수가 13인 경우 "박수짝"을, 36인 경우 "박수짝짝"을 출력하면 된다.1~99 사이의 정수를 입력하시오>>36
박수짝짝

 

package Chapter02;

import java.util.Scanner;

public class 실습문제06_369게임 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1~99사이의 정수를 입력하시오>>");
		int input_num = sc.nextInt();
		
		//10의자리 
		int sip_num = input_num/10;
		
		//1의자리
		int il_num = input_num%10;
		
		if(sip_num == 3 || sip_num ==6 || sip_num ==9) {
			
			if(il_num == 3 || il_num == 6 || il_num == 9) {
				System.out.println("박수짝짝");
			}else {
				
				System.out.println("박수짝");
			}
			
		}else {
			System.out.println("3, 6 , 9 수가 들어 있지 않습니다.");
		}

	}

}

7. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. (100, 100)과 (200, 200)의 두 점으로 이루어진 사각형이 있을 때, Scanner를 이용하여 정수 x와 y값을 입력받고 점 (x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.점 (x, y)의 좌표를 입력하시오>>150 150
(150, 150)는 사각형 안에 있습니다.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제07_2차원평면 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("점 (x,y)의 좌표를 입력하시오>>");
		int x_pos = sc.nextInt();
		int y_pos = sc.nextInt();
		
		int first_x_pos = 100;
		int second_x_pos = 200;
		
		int first_y_pos = 100;
		int second_y_pos = 200;
		
		if((x_pos >= first_x_pos && x_pos <= second_x_pos)
				&& (y_pos >= first_y_pos && y_pos <= second_y_pos)){
			System.out.println("("+x_pos+","+y_pos+")는 사각형 안에 있습니다.");
			
		}
		else {
			System.out.println("("+x_pos+","+y_pos+")는 사각형 안에 없습니다.");
		}
			
		
		}

	}

8. 2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 직사각형을 구성하는 두 점 (x1, y1), (x2, y2)를 입력받아 (100, 100), (200, 200)의 두 점으로 이루어진 직사각형과 충돌하는지 판별하는 프로그램을 작성하라.

[Hint] 다음은 점 (x,y)가 (rectx1, recty1), (rectx2, recty2)의 사각형 안에 있으면 true를 리턴하는 메소드이다. 이 메소드를 활용하라.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제08_2차원평면_키보드 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		System.out.print("점 (x1,y1)의 좌표를 입력하시오>>");
		int x1_pos = sc.nextInt();
		int y1_pos = sc.nextInt();
		
		System.out.print("점 (x2,y2)의 좌표를 입력하시오>>");
		int x2_pos = sc.nextInt();
		int y2_pos = sc.nextInt();
		
		int first_x_pos = 100;
		int second_x_pos = 200;
		
		int first_y_pos = 100;
		int second_y_pos = 200;

		
		
		
		
	
		}
		
	}


9. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점 (x, y)를 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라.

[HInt] 중심에서 점 (x, y) 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다. 변수 x에 대한 제곱근의 값은 Math.sqrt(x)를 이용하면 된다. Math는 6장에서 설명한다.

원의 중심과 반지름 입력>>10 10 6.5
점 입력>>13 13
점 (13,13)는 원 안에 있다.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제09_원의중심 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("원의 중심과 반지름 입력>>");
		double center_x = sc.nextDouble();
		double center_y = sc.nextDouble();
		double radius = sc.nextDouble();
		
		//중심에서 점(x,y)사이의 거리가 반지름보다 작거나 같으면 
		//원의 내부에 있음. 제곱근은 Math.sqrt(x)를 이용하면 된다. 
		
		System.out.print("점 입력>>");
		double x = sc.nextDouble();
		double y = sc.nextDouble();
		
		double disc = Math.sqrt((center_x-x)*(center_x-x)
				               +(center_y-y)*(center_y-y));
		
		if(disc <= radius) {
			System.out.println("점 (" + x + ", " + y +")는 원안에 있다." );
		}else {
			System.out.println("원안에 없다.");
		}
		
	}

}

 

10. 원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.첫번째 원의 중심과 반지름 입력>>10 10 3
두번째 원의 중심과 반지름 입력>>12 12 2
두 원은 서로 겹친다.

 

 

package Chapter02;

import java.util.Scanner;

public class 실습문제10_원이겹치는 {

	public static void main(String[] args) {
		//외접과 내접의 개념을 생각하자.
		//반지름의 합보다 작으면 원이 겹침
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번째 원의 중심과 반지름 입렵>>");
		Double x1 = sc.nextDouble();
		Double y1 = sc.nextDouble();
		Double d1 = sc.nextDouble();
		
		System.out.print("두번째 원의 중심과 반지름 입력>>");
		Double x2 = sc.nextDouble();
		Double y2 = sc.nextDouble();
		Double d2 = sc.nextDouble();
		
		
		Double disc = Math.sqrt(((x1-x2)*(x1-x2))*((y1-y2)*(y1-y2)));
		Boolean p = disc <= (d1+d2) ? true : false;
		if(p == true) {
			System.out.println("두 원은 서로 겹친다.");
		}else {
			System.out.println("두 원은 서로 겹치지 않습니다.");
		}
			
			

	}

}

 

11. 숫자를 입력받아 3~5는 "봄", 6~8은 "여름", 9~11은 "가을", 12,0,1의 경우 "겨울"을, 그 외 숫자를 입력한 경우 "잘못입력"을 출력하는 프로그램을 작성하라.달을 입력하세요(1~12)>>9
가을

(1) if-else 문을 이용하여 프로그램을 작성하라.

(2) switch 문을 이용하여 프로그램을 작성하라.

 

package Chapter02;

import java.util.Scanner;

public class 실습문제11_봄여름가을겨울 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("달을 입력하세요(1~12)>>");
		int month_num = sc.nextInt();
		
		if(month_num >=3 && month_num <=5) {
			System.out.println("봄");
		}
		else if(month_num >=6 && month_num<=8) {
			System.out.println("여름");
		}else if(month_num >=9 && month_num<=11) {
			System.out.println("가을");
		}else if(month_num >=12 && month_num<=2) {
			System.out.println("겨울");
		}
		
		System.out.println();
		switch (month_num) {
		case 3: case 4: case 5:
			System.out.println("봄");
			break;
		case 6: case 7:  case 8:
			System.out.println("여름");
			break;
		case 9: case 10: case 11:
			System.out.println("가을");
			break;
		case 12: case 1:  case 2:
			System.out.println("겨울");
			break;
		}
		
		
	}

}

 

12. 사칙 연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 +, -, *, /의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다."를 출력하고 종료한다.

[Hint] 연산자는 scanner.next()를 이용하여 문자열로 입력받으면 된다. 문자열 s가 "+"와 같은지 검사하려면 if(s.equals("+"))를 이용하며, true이면 s와 "+"가 같다.

연산>>2 + 4
2.0+4.0의 계산 결과는 6.0

(1) 연산 식을 구분할 때 if-else 문을 이용하여 프로그램을 작성하라.

(2) 연산 식을 구분할 때 switch 문을 이용하여 프로그램을 작성하라

 

package Chapter02;

import java.util.Scanner;

public class 실습문제12_사칙연산 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("연산>>");
		int num1 = sc.nextInt();
		String op = sc.next();
		int num2 = sc.nextInt();
		
		if(op.equals("+")) {
			
			System.out.println(num1 + num2);
			
		}else if(op.equals("=")) {
			System.out.println(num1 == num2 ? "두 수는 같습니다." : "두 수는 다릅니다.");
		
		}else if(op.equals("*")) {
			
			System.out.println(num1*num2);
			
		}else if(op.equals("/")) {
			
			System.out.println(num1>=num2 ? num2/num1 : num1/num2);
		}
	

	}

}