본문 바로가기
Language/Java

[명품 Java Programming]6장 문제

by DEV Lee 2020. 7. 23.
이론 문제

 

 

실습 문제

2. 중심을 나타내는 정수 x,y와 반지름 radius 필드를 가지는 Circle 클래스를 작성하고자 한다. 생성자는 3개의 인자(x,y,radius)를 받아 해당 필드를 초기화하고, equals() 메소드는 두 개의 Circle 객체의 중심이 같으면 같은 것으로 판별하도록 한다.

>>

class Circle{
	int x,y,radius;
	Circle(int x,int y,int radius){this.x=x;this.y=y;this.radius=radius;}
	String show() {return "Circle"+this.center()+"반지름"+radius;}
	String center() {return "("+x+","+y+")";}
}
public class EX02 {
	public static void main(String[]args) {
		Circle a=new Circle(2,3,5);
		Circle b=new Circle(2,3,30);
		System.out.println("원 a : "+a.show());
		System.out.println("원 b : "+b.show());
		if(a.center().equals(b.center()))
			System.out.println("같은 원");
		else
			System.out.println("서로 다른 원");
			
	}
}

 

4. 다음 코드를 수정하여 Shape 클래스는 base 패키지에, Circle 클래스는 derived 패키지에, GraphicEditor 클래스는 app 패키지에 분리 작성하라.

>>

package base;

public class Shape {
	public void draw() {System.out.println("Shape");}
}
package derived;
import base.*;

public class Circle extends Shape{
	public void draw() {System.out.println("Circle");}
}
package app;
import derived.*;
import base.*;

public class GraphicEditor {
	public static void main(String[]args) {
		Shape shape=new Circle();
		shape.draw();
	}
}

 

6. 경과시간을 맞추는 게임을 작성하라. 다음 예시를 참고하면, <Enter>키를 입력하면 현재 초 시간을 보여주고 여기서 10초에 더 근접하도록 다음 <Enter:>키를 입력한 사람이 이기는 게임이다.

>>

import java.util.Calendar;
import java.util.Scanner;

public class EX06 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		String str;
		System.out.println("10초에 가까운 사람이 이기는 게임입니다.");
		System.out.print("황기태 시작<Enter>키>>");
		str=scan.nextLine();
		Calendar h_start=Calendar.getInstance();
		int h_s=h_start.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간="+h_s);
		
		System.out.print("10초 예상 후 <Enter>키>>");
		str=scan.nextLine();
		Calendar h_end=Calendar.getInstance();
		int h_e=h_end.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간="+h_e);
		int h=Math.abs((60-h_e)-(60-h_s));
		
		
		System.out.print("이재문 시작<Enter>키>>");
		str=scan.nextLine();
		Calendar l_start=Calendar.getInstance();
		int l_s=l_start.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간="+l_s);
		
		
		System.out.print("10초 예상 후 <Enter>키>>");
		str=scan.nextLine();
		Calendar l_end=Calendar.getInstance();
		int l_e=l_end.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간="+l_e);
		int l=Math.abs((60-l_e)-(60-l_s));
		
		String winner;
		if(Math.abs(10-h)<Math.abs(10-l))
			winner="황기태";
		else if(Math.abs(10-h)==Math.abs(10-l))
			winner="없다(동점).";
		else
			winner="이재문";
		System.out.println("황기태의 결과 "+h+", 이재문의 결과 "+l+", 승자는 "+winner);
	}
}

 

8. 문자열을 입력받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.

>>

import java.util.Scanner;

public class EX08 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.println("문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.");
		String str=scan.nextLine();
		
		int cnt=0;//출력할 index
		for(int i=0;i<str.length();i++) {
			cnt=i;
			for(int j=0;j<str.length();j++) {
				System.out.print(str.charAt(cnt++));
				if(cnt>=str.length())
					cnt-=str.length();
			}
			System.out.println();
		}
	}
}

 

10. 겜블링 게임을 만들어보자. 두 사람이 게임을 진행한다 .이들의 이름을 키보드로 입력받으며 각 사람은 Person 클래스로 작성하라 .그러므로 프로그램에는 2개의 Person차례에서 <Enter>키를 입력하면, 3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다. 난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 대문에 숫자의 범위는 1~3까지로 한다.

>>

import java.util.Scanner;

class Person{
	Scanner scan=new Scanner(System.in);
	String name;
	Person(String name){
		this.name=name;
	}
	
	void gameStr() {
		System.out.println("["+name+"]:<Enter>");
	}
	String getName() { return name;}
	int GameStart() {
		int arr[]=new int[3];
		int cnt=0;
		
		for(int i=0;i<3;i++)//난수 배열 생성
			arr[i]=(int)(Math.random()*3+1);
		for(int i=0;i<3;i++){
			int num=scan.nextInt();
			if(num==arr[i])
				cnt++;
		}
		for(int i=0;i<3;i++)
			System.out.print(arr[i]+" ");
		if(cnt==3) return 1;
		else return 0;
	}
}
public class EX10 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("1번째 선수 이름>>");
		String name=scan.next();
		Person p1=new Person(name);
		
		System.out.print("2번재 선수 이름>>");
		name=scan.next();
		Person p2=new Person(name);
		
		int num;
		do {
			p1.gameStr();
			num=p1.GameStart();
			if(num==1) {
				System.out.println("    "+p1.getName()+"님이 이겼습니다.");
				break;
			}
			System.out.println("    아쉽군요!");
			
			p2.gameStr();
			num=p2.GameStart();
			if(num==1) {
				System.out.println("    "+p2.getName()+"님이 이겼습니다.");
				break;
			}
			System.out.println("    아쉽군요!");
		}while(true);
	}
}

 

12. 문제 10의 겜블링 게임을 n명이 하도록 수정하라. 실행 예시와 같이 게임에 참여하는 선수의 수를 입력받고 각 선수의 이름을 입력받도록 수정하라.

>>

import java.util.Scanner;

class Person{
	Scanner scan=new Scanner(System.in);
	String name;
	Person(String name){
		this.name=name;
	}
	
	void gameStr() {
		System.out.println("["+name+"]:<Enter>");
	}
	String getName() { return name;}
	int GameStart() {
		int arr[]=new int[3];
		int cnt=0;
		
		for(int i=0;i<3;i++)//난수 배열 생성
			arr[i]=(int)(Math.random()*3+1);
		for(int i=0;i<3;i++){
			int num=scan.nextInt();
			if(num==arr[i])
				cnt++;
		}
		for(int i=0;i<3;i++)
			System.out.print(arr[i]+" ");
		if(cnt==3) return 1;
		else return 0;
	}
}
public class EX12 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("겜블링 게임에 참여할 숫자>>");
		int n=scan.nextInt();
		Person[]p=new Person[n];
		
		for(int i=0;i<n;i++) {
			System.out.print(i+"번째 선수 이름>>");
			String name=scan.next();
			p[i]=new Person(name);
		}
		
		int num;
		int check=0;
		do {
			for(int i=0;i<n;i++) {
				p[i].gameStr();
				num=p[i].GameStart();
				if(num==1) {
					System.out.println("    "+p[i].getName()+"님이 이겼습니다.");
					check=1;break;
				}
				else System.out.println("    아쉽군요!");
			}
		}while(check!=1);
	}
}

댓글