본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 2장 실습문제

by 푸고배 2017. 7. 7.

※ JAVA에서 키 입력

1. System.in

키보드 장치와 연결된 원시적인 저수준 입력 스트림 객체

import java.io.*; // InputStreamReader의 사용을 위한 임포트문

 

InputStreamReader rd = new InputStreamReader(System.in); // 키보드 입력 스트림 생성

int c = rd.read(); // 키보드로부터 문자 하나 읽기, 읽은 문자 값은 c에 저장
System.out.println((char)a); // 입력된 문자 출력

 

2. Scanner 클래스를 이용한 키 입력

Scanner 클래스를 이용하면 더 쉽게 키 입력을 받을 수 있다.

import java.util.Scanner; // Scanner 클래스의 사용을 위한 임포트문

 

Scanner scanner = new Scanner(System.in); // Scanner 객체 사용

String name = scanner.next(); // String 값 받기

int age = scanner.nextInt(); // Int 값 받기

double weight = scanner.nextDouble(); // Double 값 받기

 

1. Scanner 클래스를 이용하여 키보드에서 영문자 한 자를 입력받아 소문자이면 대문자로, 대문자이면 소문자로 변환하여 출력하는 프로그램을 작성하라. 입력된 문자가 영문자가 아니면 "영문자가 아닙니다."를 출력하라.

 

<소스코드> Chapter2_1

import java.util.Scanner;

public class Chapter2_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		char str;
		while(true){
			System.out.print("영문자 한 자를 입력하시오(종료 : -1) : ");
			str = s.next().charAt(0); // char 형으로 입력 받는 방
			if(str==-1){
				break;
			}
			if(str>='A' && str<='Z'){
				str+=32;
			}
			else if(str>='a' && str<='z'){
				str-=32;
			}
			else{
				System.out.println("영문자가 아닙니다.");
				break;
			}
			System.out.println(str);
		}
	}

}

 

s.next().charAt(0); // 한 글자만 입력받을 때 사용

1. 한 문자를 입력받는다.

 

2. 대문자와 소문자는 아스키코드로 32차이가 난다는 점을 이용한다.

  (=대문자에 +32를 해주면 소문자가 된다.)

  (=소문자에 -32를 해주면 대문자가 된다.) 

 

3. 영문자가 아닐때는 예외처리를 해준다.

 

2. 키보드로 입력받은 주민번호에서 문자열을 '-'으로 분리하여 주민번호 앞자리만 출력하는 프로그램을 작성하라. 구분 문자를 설정할 때에는 Scanner 클래스의 useDelimiter() 메소드를 사용하라.

 

<소스코드> Chapter2_2

import java.util.Scanner;

public class Chapter2_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in).useDelimiter("\\s|-");
		System.out.print("주민등록번호를 입력하시오(예:910218-*******) : ");
		System.out.println(s.next());
	}

}
Scanner a = new Scanner(System.in).useDelimiter("\\s|-") // 공백 문자나 '-'를 분리 문자로 사용

 

3. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇 개로 변환되는지 출력하라. 예를 들어, 65370이 입력되면 오만 원권 1매, 만 원권 1매, 천 원권 5매, 100원짜리 동전 3개, 50원짜리 동전 1개, 10원짜리 동전 2개이다.

 

<소스코드> Chapter2_3

import java.util.Scanner;

public class Chapter2_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		int monney = s.nextInt();
		
		System.out.println("오만 원권 : " + monney/50000 + "매");
		System.out.println("만 원권 : " + monney%50000/10000 + "매");
		System.out.println("천 원권 : " + monney%10000/1000 + "매");
		System.out.println("500원 짜리 동전 : " + monney%1000/500 + "개");
		System.out.println("100원 짜리 동전 : " + monney%500/100 + "개");
		System.out.println("50원 짜리 동전 : " + monney%100/50 + "개");
		System.out.println("10원 짜리 동전 : " + monney%50/10 + "개");
		
	}

}
 

 

1. 50000으로 나눈 몫은 오만 원권의 수가 된다.

 

2. 50000으로 나눈 나머지로 만 원권의 수를 구할 수 있다.

(=(50000으로 나눈 나머지)를 10000으로 나눈 몫)

 

3. 이 때 10000으로 나눈 몫이 아닌 나머지로 천 원권의 수를 구할 수 있다.

(=위와 같은 알고리즘)

....

4. 각 지폐, 동전 별 개수를 출력한다.

 

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

 

 

 

<소스코드> Chapter2_4

import java.util.Scanner;

public class Chapter2_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner a = new Scanner(System.in);
		int number;
		int first;
		int last;
		while(true){
			System.out.print("1~99 사이의 정수를 입력하시오(종료:-1)>> ");
			number = a.nextInt();
			first = number/10;
			last = number%10;
			if(number==-1) // -1 입력시 종료
				break;
			if(first%3==0 || last%3==0){ // 둘 중 하나가 3의 배수 일 경우 
				if(first%3==0 && last%3==0) // 둘 다 3의 배수 일 경우 
					System.out.println("박수짝짝");
				else
					System.out.println("박수짝");
			}
		}
	}

}
​

 

number = a.nextInt(); // Int 값을 반환

 

1. 나누기 연산자를 이용해서 십의 자리를 구한다.

 

2. 모듈러 연산자(%)를 이용해서 일의 자리를 구한다.

 

3. 둘 중 하나가 3의 배수 일 때 "박수짝"을 출력한다.

 

4. 둘 다 3의 배수 일 때 "박수짝짝"을 출력한다. 

 

5. Scanner를 이용하여 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지를 판별하라. 삼각형이 가능하려면 두 변의 합이 다른 한 변의 합보다 반드시 커야 한다.

 

<소스코드> Chapter2_5

import java.util.Scanner;

public class Chapter2_5 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		int x=s.nextInt();
		int y=s.nextInt();
		int z=s.nextInt();
		if((x>=y+z)||(y>=x+y)||(z>=x+y)){
			System.out.println("만들 수 없다.");
		}
		else{
			System.out.println("만들 수 있다.");
		}
	}

}
​

 

x,y,z 중 하나라도 나머지 두 개의 합보다 값이 크면 삼각형을 만들 수 없다.

 

6. 키보드로부터 특정 연도를 입력받아 윤년인지 아닌지를 판별하는 프로그램을 작성하라. 연수가 4로 나누어떨어지는 해는 우선 윤년으로 하되, 그중에서 100으로 나누어떨어지는 해는 평년으로 하고, 다만 400으로 나누어떨어지는 해는 다시 윤년으로 판정한다.

 

<소스코드> Chapter2_6

1. 4로 나누어 떨어지면 "윤년"

   (=4로 나누어 떨어지지 않으면 "평년")

 

2. 1번에서 100으로 나누어 떨어지면 "평년"

   (=1번에서 100으로 나누어 떨어지지 않으면 "윤년"

 

3. 2번에서 400으로 나누어 떨어지면 "윤년"

   (=2번에서 400으로 나누어 떨어지면 "평년")

import java.util.Scanner;

public class Chapter2_6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		String str;
		int year = s.nextInt();
		if(year%4==0){
			if(year%100==0){
				if(year%400 ==0){
					str="윤년";
				}
				else{
					str="평년";
				}
			}
			else{
				str="윤년";
			}
		}
		else{
			str="평년";
		}
	System.out.println(str);
	}
}

 

7. 2차원 평면에서 하나의 직사각형은 두 점으로 표현된다. (50, 50)과 (100, 100)의 두 점으로 이루어진 사각형이 있다고 하자. 이때 키보드로부터 한 점을 구성하는 정수 x와 y 값을 입력받고 점(x, y)가 이 직사각형 안에 있는지를 판별하는 프로그램을 작성하라.

 

 

<소스코드> Chapter2_7


import java.util.Scanner;

public class Chapter2_7 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("점 (x,y)의 좌표를 입력하시오>>");
		Scanner s = new Scanner(System.in);
		int x = s.nextInt();
		int y = s.nextInt();
		if(x>=50&&x<=100){
			if(y>=50&&y<=100){
				System.out.println("사각형 안에 점이 있습니다.");
			}
			else
				System.out.println("사각형 밖에 점이 있습니다.");
		}
	}
}

50x100 일 때 50y≤100이면 주어진 직사각형 안에 점이 있다.

 

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

 

 

<소스코드> Chapter2_8

import java.util.Scanner;

public class Chapter2_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("점 (x1, y1), (x2, y2)의 좌표를 입력하시오>>");
		Scanner s = new Scanner(System.in);
		int x1 = s.nextInt();
		int y1 = s.nextInt();
		int x2 = s.nextInt();
		int y2 = s.nextInt();
		
		if((x1>=50&&x1<=100)&&(y1>=50&&y1<=100)){
			System.out.println("사각형이 겹칩니다.");
		}
		else if((x2>=50&&x2<=100)&&(y2>=50&&y2<=100)){
			System.out.println("사각형이 겹칩니다.");
		}
		else{
			System.out.println("사각형이 겹치지 않습니다.");
		}
	}

}
​

 

7번과 비슷한 알고리즘으로 두 점 중 한 점이 주어진 사각형 안에 존재하면 다른 한 점의 위치에 관계없이 서로 충돌한다.

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/First_Step/tree/master/Chapter2/Chapter2_Ex

 

 

 

 

 

반응형

댓글