※ 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("사각형 밖에 점이 있습니다.");
}
}
}
50≤x≤100 일 때 50≤y≤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
'Programming Study > 명품자바프로그래밍' 카테고리의 다른 글
[명품자바프로그래밍] 3장 실습문제(2) (0) | 2017.07.08 |
---|---|
[명품자바프로그래밍] 3장 실습문제(1) (0) | 2017.07.08 |
[명품자바프로그래밍] 2장 Open Challenge (0) | 2017.07.07 |
[명품자바프로그래밍] 1장 Open Challenge (0) | 2017.07.07 |
[명품자바프로그래밍] 1장 실습문제 (3) | 2017.07.07 |
댓글