728x90
728x90

 

명품자바프로그래밍 2장 연습문제

명품자바프로그래밍 2장 요약, 예제

 


 

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

 

 

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

 

원화를 입력하세요(단위 원) >> 3300
3300원은 $3.0입니다.
package Luxuryjava;
import java.util.Scanner;
public class h0201 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("원화를 입력하세요(단위:원)>>");
		int num=s.nextInt();
		double dollar=num/1100;
		System.out.println(num+"원은 $"+dollar+"입니다.");
		s.close();
		}
}

 

 

 

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

 

2자리수 정수 입력(10~99) >> 77
Yes! 10의 자리와 1의 자리가 같습니다.

 

※ Tip. 10의 자리를 10으로 나누고 1의 자리를 10으로 나눈 나머지값이 같은 지를 판별합니다

package Luxuryjava;
import java.util.Scanner;
public class h0202 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("2자리의 정수 입력(10~99)>>");
		int num = s.nextInt();
		if (num/10==num%10) {
			System.out.println("Yes! 10의자리와 1의 자리가 같습니다.");
		}else { 
			System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
		}s.close();
	}
}

 

※ 2자리의 정수인지도 판별해 주려면 이렇게 추가해주면 됩니다. 여기서 스캐너는 한 번 밖에 작동되지 않습니다.

package Luxuryjava;
import java.util.Scanner;
public class h0202 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("2자리의 정수 입력(10~99)>>");
		int num = s.nextInt();
		if (num>=10 && num<100) {
			if (num/10==num%10) {
				System.out.println("Yes! 10의자리와 1의 자리가 같습니다.");
			}else { 
			System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
			}
		} else {
		System.out.println("2자리의 정수가 아닙니다.");
	}s.close();
}
	}

 

 

 

3. 3. Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇개로 변환되는지 출력하라. #자바지폐단위별숫자구하기 #자바자판기프로그램 #자바잔돈프로그램

 

금액을 입력하시오 >> 65376
오만 원권 1매
만 원권 1매
천 원권 5매
100원 3개
50원 1개
10원 2개
1원 6개

 

※ 스캐너 생성, num이라는 변수 생성한 후 입력받은 값을 50,000으로 나눈 몫, 50,000으로 나눈 나머지, 위에서 나온 나머지를 10,000으로 나눈 몫, 그리고 10,000으로 나눈 나머지 .... 이것을 1원까지 반복해주는 것입니다. 마지막 1원은 나머지가 없으므로 나누기만 하고 끝납니다.

 

package Luxuryjava;
import java.util.Scanner;
public class homework0203 {
	public static void main(String[] args) {
	Scanner s=new Scanner(System.in);
	System.out.println("금액을입력하시오>>");

	int num=s.nextInt();
		System.out.println("50000won"+num/50000+"mae");
		num%=50000;
		System.out.println("10000won"+num/10000+"mae");
		num%=10000;
		System.out.println("1000won"+num/1000+"mae");
		num%=1000;
		System.out.println("100won"+num/100+"mae");
		num%=100;
		System.out.println("50won"+num/50+"mae");
		num%=50;
		System.out.println("10won"+num/10+"mae");
		num%=10;
		System.out.println("1won"+num/1+"mae");
		s.close();
	}
}

 

※ 배열로 푸는 법. 2장에서는 배우지 않았지만 훨씬 간단합니다.

package Luxuryjava;
import java.util.Scanner;
public class h0203 {
	public static void main(String[] args) {
		int[] coin = {50000, 10000, 1000, 500, 100, 50, 10, 1};
		Scanner s=new Scanner(System.in);
		System.out.println("금액을 입력하시오>>");
		int num=s.nextInt();		
		for (int i=0; i<coin.length; i++) {
			System.out.println(coin[i]+"원:" + num/coin[i]);
			num%= coin[i];
		}
	s.close();
	}
}

 

 

 

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

정수 3개 입력 >> 20 100 33
중간 값은 33

 

※ 변수 세개와 스캐너 세번 선언! if-else, else if 구문을 사용하여 a<b<c 일 때(중간값 b), b<a<c 일 때(중간값 a), 나머지 일 때(중간값 c)로 조건을 걸어줍니다.

package Luxuryjava;
import java.util.Scanner;
public class h0204 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);		
		int a,b,c;
		System.out.println("정수 3개 입력>>");
		a=s.nextInt();
		b=s.nextInt();
		c=s.nextInt();
		if(a<b && b<c) {System.out.print("중간 값은"+b+"입니다.");}
		if(b<a && a<c) {System.out.print("중간 값은"+a+"입니다.");}
		else {System.out.print("중간 값은"+c+"입니다.");}
		s.close();
	}
}

 

 

 

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

정수 3개 입력 >> 4 3 5
삼각형이 됩니다.

 

※ 삼각형이 되려면 가장 긴 변이 2변의 합보다 작아야 합니다.

package Luxuryjava;
import java.util.Scanner;
public class h0205 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("정수 3개를 입력>>");
		int l1=s.nextInt();
		int l2=s.nextInt();
		int l3=s.nextInt();
		if((l1+l2)<l3 || (l1+l3)<l2 || (l2+l3)<l1)
			System.out.println("삼각형을 만들 수 없습니다.");
		else
			System.out.println("삼각형이 됩니다.");
		s.close();
	}
 }

 

 

 

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

1~99 사이의 정수를 입력하시오 >> 36
박수짝짝

※ if조건문과 연산자 (0일 경우, 범위가 아닐 경우도 넣기)

package Luxuryjava;
import java.util.Scanner;
public class h0206 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.print("1~99 사이의 정수를 입력하시오>>");	
		int num=s.nextInt();
		
		if(num!=0 && num>=1 && num <=99) {
			int a,b;
			a=num/10;
			b=num%10;
			
			if((a==3 || a==6 || a==9) && (b==3 || b==6 || b==9)) {
				System.out.println("박수짝짝");	
			}else if((a==3 || a==6 || a==9) || (b==3 || b==6 || b==9)) {
				System.out.println("박수짝");	}
			}
		else {
        	System.out.println("숫자의 범위를 벗어났습니다.");
        }
		s.close();
	}
}

 

 

 

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

점 (x,y)의 좌표를 입력하시오 >> 150 150
(150,150)은 사각형 안에 있습니다.

※ if조건과 논리

package Luxuryjava;
import java.util.Scanner;
public class h0207 {
	public static void main(String[] args) {
	System.out.println("점 (x,y)의 좌표를 입력하시오 >>");
	Scanner s=new Scanner(System.in);
	int x=s.nextInt();
	int y=s.nextInt();
	if((100<=x && x<=200)&&(100<=y && y<=200))
		System.out.println("사각형 안에 점이 있습니다.");
	else System.out.println("사각형 안에 점이 없습니다.");
	s.close();
    }
}

 

 

 

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

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

 

public static boolean inRect(int x, int y, int rectx1, int rectx2, int recty1, int recty2){
  if ((x>=rectx1 && x<=rectx2) && (y>=recty1 && y<=recty2))
    { return true; }
  else { return false; }
}

 

※ if조건과 논리 : 한 꼭지점이 걸칠 경우, 모든 꼭지점이 안에 있는 경우, (100,100),(200,200)의 모든 꼭지점이 사각형 안에 있는 경우 (만든 사각형이 더 큰 경우)

 

package Luxuryjava;
import java.util.Scanner;
public class h0208 {
	public static boolean inRect(int x, int y, 
			int rectx1, int rectx2, int recty1, int recty2) {
		if((x>=rectx1 && x<=rectx2) && (y>=recty1 && y<=recty2))
			return true; 
		else 
			return false;
	}
	public static void main(String[] args) {
			System.out.println("두 점 (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 (inRect(x1,y1,100,100,200,200) ||
				inRect(x2,y2,100,100,200,200) ||
				inRect(x1,y2,100,100,200,200) ||
				inRect(x2,y1,100,100,200,200))
				System.out.println("사각형이 겹칩니다.");
			else if ((inRect(x1,y1,100,100,200,200)) &&
						inRect(x2,y2,100,100,200,200) &&
						inRect(x2,y1,100,100,200,200) &&
						inRect(x1,y2,100,100,200,200))
				System.out.println("사각형이 겹칩니다.");
			else if ((inRect(100,100,x1,y1,x2,y2)) &&
					inRect(100,200,x1,y1,x2,y2) &&
					inRect(200,100,x1,y1,x2,y2) &&
					inRect(200,200,x1,y1,x2,y2))
				System.out.println("사각형이 겹칩니다.");
			else
				System.out.println("사각형이 겹치지 않습니다.");
			s.close();
	}
		    }

 

※ 주어진 inRect를 사용하지 않고 푸는 방법

package Luxuryjava;
import java.util.Scanner;
public class h02081 {
	public static void main(String[] args) {
		System.out.println("두 점 (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>=100 & x1<=200) && (y1>=100 && y1<=200)) {
			System.out.println("사각형이 겹침");
		}else if((x2>=100 && x2<200) && (y2>=100 && y2<=200)) {
			System.out.println("사각형이 겹침");
		}else if(x1<=100 && x2>=200 && y1<=100 && y2>=200) {
			System.out.println("사각형이 겹침");
		}
		else
			System.out.println("사각형이 안겹침");
		s.close();
	}
	}

 

 

 

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

원의 중심과 반지름 입력>> 10 10 6.5

점 입력>> 13 13

점 (13.0,13.0)은 원 안에 있습니다.

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

※ Math.sqrt : 제곱근(루트) 값을 계산해주는 함수

※ 원의 중심과 점의 거리가 반지름 길이와 같거나 작아야 합니다.
√(x2-x1)
2 + (y2-y1)2 , 원의 넓이 = 반지름2 *원주

 

package Luxuryjava;
import java.util.Scanner;
public class h0209 {

	public static void main(String[] args) {
		System.out.println("원의 중심과 반지름 입력>>");
		Scanner s=new Scanner(System.in);
		double p1=s.nextDouble();
		double p2=s.nextDouble();
		double r=s.nextDouble();
		
		System.out.println("점 입력>>");
		double x=s.nextDouble();
		double y=s.nextDouble();
		
		double distance=Math.sqrt((x-p1)*(x-p1)+(y-p2)*(y-p2));
		if(distance<r)
		System.out.println("점"+x+","+y+"은"+"원 안에 있습니다.");
		else
		System.out.println("점"+x+","+y+"은"+"원 밖에 있습니다.");
		s.close();
	}
}

 

 

 

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

첫번째 원의 중심과 반지름 입력>> 10 10 3

두번째 원의 중심과 반지름 입력>> 12 12 2

두 원은 서로 겹친다.

※ 두 개의 반지름의 합보다 작으면 원이 겹칩니다.

 

package Luxuryjava02;
import java.util.Scanner;
public class h0210 {
	public static void main(String[] args) {
		System.out.println("첫 번째 원의 중심과 반지름 입력>>");
	Scanner s=new Scanner(System.in);
	int x=s.nextInt();
	int x1=s.nextInt();
	double r=s.nextDouble();
	
	System.out.println("두 번째 원의 중심과 반지름 입력>>");
	int y=s.nextInt();
	int y1=s.nextInt();
	double r1=s.nextDouble();
	double distance=0;
	distance = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
	if (distance<=r+r1) 
		System.out.println("두 원은 서로 겹친다.");
	else
		System.out.println("두 원은 서로 안겹친다.");
	s.close();	
	}
}

 

 

 

11. 숫자를 입력받아 3~5는 봄, 6~8은 여름, 9~11은 가을, 12,1,2는 겨울, 그 외의 숫자를 입력한 경우 잘못입력을 출력하는 프로그램을 작성하라. if-else 문과 switch 둘 다 이용해볼 것.

달을 입력하세요(1~12) >> 9
가을


(1) if-else

package Luxuryjava;
import java.util.Scanner;
public class h0211 {
	public static void main(String[] args) {
		System.out.println("달을 입력하세요(1~12)>>");
		Scanner m=new Scanner(System.in);
		int num=m.nextInt();
		if (num>=3 && num<=5)
			System.out.println("봄");
		else if(num>=6 && num<=8)
			System.out.println("여름");
		else if(num>=9 && num<=11)
		System.out.println("가을");
		else if(num==12 || num==1 || num==2)
			System.out.println("겨울");
		else
			System.out.println("잘못된 만남이 아니고 입력");
		m.close();
	}
}

 

(2) switch

package Luxuryjava;
import java.util.Scanner;
public class h02111 {
	public static void main(String[] args) {
		System.out.println("달을 입력하세요(1~12)>>");
		Scanner m=new Scanner(System.in);
		int num=m.nextInt();
		switch(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;
		default:
			System.out.println("잘못입력");		
		}
		m.close();
	}
}

 

 

 

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

연산 >> 2+4
2+4의 계산 결과는 6

※ 문자열 s가 "+"와 같은 지 검사하려면 if(s.equals.("+"))를 이용하며, true이면 s와 "+"가 같다.

package Luxuryjava02;
import java.util.Scanner;
public class h0212 {
// 연산자 : an operator , 결과 : result
	public static void main(String[] args) {
		System.out.print("연산>>");
		Scanner s=new Scanner(System.in);
		int op1=s.nextInt();
		String op=s.next();
		int op2=s.nextInt();
		
		int res=0;
		if(op.equals("+"))
			res=op1+op2;
		else if(op.equals("-"))
			res=op1-op2;
		else if(op.equals("*"))
			res=op1*op2;
		else if(op.equals("/")) {
			if(op2==0) {
				System.out.print("0으로 나눌 수 없습니다.");
				s.close();
				return;
			}
			else
				res=op1/op2;
			}
		else {
			System.out.print("사칙연산이 아닙니다.");
			s.close();
			return;
		}
		System.out.println(op1+op+op2+"의 계산결과는"+res);
		s.close();
	}
}
package Luxuryjava02;
import java.util.Scanner;
public class h02121 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.print("연산>>");
		int op1=s.nextInt();
		String op=s.next();
		int op2=s.nextInt();
		int res=0;
		switch(op) {
			case "+":
				res=op1+op2;
			break;
			case "-":
				res=op1*op2;
			case "*":
				res=op1*op2;
			case "/":
				if(op2==0) {
					System.out.print("0으로 나눌수없다");
					s.close();
				}
				res=op1/op2;
				break;
			default:
				System.out.print("사칙연산이아닙니다.");
				s.close();
				break;
		}
		System.out.print(op1+op+op2+"의 계산결과는"+res);
		s.close();
	}
}
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v