본문 바로가기
IT/프로그래밍

명품 JAVA Programming 6장 실습문제 정답

by nutrient 2020. 12. 12.
728x90
728x170

명품 JAVA Programming 6장 실습문제 정답

 

명품 JAVA Programming 6장 실습문제 정답

 

1번

public class MyPoint {
	private int x, y;
	
	public MyPoint(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public String toString() {
		return "Point(" + x + "," + y + ")";
	}

	public boolean equals(Object p) {
		MyPoint po = (MyPoint)p;
		if(x == po.x && y == po.y)
			return true;
		else
			return false;
	}
	public static void main(String [] args) {
		MyPoint p = new MyPoint(3, 50);
		MyPoint q = new MyPoint(4, 50);
		System.out.println(p);
		if(p.equals(q)) System.out.println("같은 점");
		else System.out.println("다른 점");			
	}
}

2번

class Circle {
	private int x, y, radius;
	public Circle(int x, int y, int radius) {
		this.x = x;
		this.y = y;		
		this.radius = radius;		
	}
	public String toString() {
		return "Circle(" + x + "," + y + ")" + "반지름" + radius; 
	}
	public boolean equals(Object obj) {
		Circle b = (Circle)obj;
		if(x == b.x && y == b.y) return true;
		else return false;
	}	
}

public class CircleApp {

	public static void main(String[] args) {
		Circle a = new Circle(2,3,5); // 중심 (2,3)에 반지름 5인 원
		Circle b = new Circle(2,3,30); // 중심 (2,3)에 반지름 30인 원
		System.out.println("원 a : " + a);
		System.out.println("원 b : " + b);
		if(a.equals(b)) 
			System.out.println("같은 원");
		else 
			System.out.println("서로 다른 원");
	}

}

3번

package etc;

public class Calc {
		private int x, y;
		public Calc(int x, int y) { this.x = x; this.y = y; }
		public int sum() { return x+y; }
	}
package main;

import etc.Calc;

public class MainApp {
	public static void main(String[] args) {
		Calc c = new Calc(10, 20);
		System.out.println(c.sum());
	}
}

4번

package app;

import base.Shape;
import derived.Circle;

public class GraphicEditor {

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

}
package base;

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

import base.Shape;

public class Circle extends Shape {
	public void draw() { System.out.println("Circle"); }
}

5번

import java.util.Calendar;

public class GoodMorning {
	public static void main(String[] args) {
		Calendar now = Calendar.getInstance(); // Calendar 객체 생성
		
		// now는 현재 시간 값을 가지고 있음
		
		int hourOfDay = now.get(Calendar.HOUR_OF_DAY);
		int minute = now.get(Calendar.MINUTE);		
		System.out.println("현재 시간은 " + hourOfDay + "시 " + minute + "분입니다.");
		
		if(hourOfDay > 4 && hourOfDay < 12) 
			System.out.println("Good Morning");
		else if(hourOfDay >= 12 && hourOfDay < 18) 
			System.out.println("Good Afternoon");
		else if(hourOfDay >= 18 && hourOfDay < 22) 
			System.out.println("Good Evening");
		else
			System.out.println("Good Night");			
	}
}

6번

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

class Player {
	private Scanner scanner = new Scanner(System.in);
	private String name;
	public Player(String name) {
		this.name = name;
	}
	
	public String getName() { return name; }
	
	public int turn() {
		System.out.print(name + " 시작 <Enter>키>>");
		// 헌재의 초 시간 출력
		String key = scanner.nextLine(); // <Enter>키를 읽음
		Calendar c = Calendar.getInstance();
		int startSecond = c.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간 = " +  startSecond);
			
		System.out.print("10초 예상 후 <Enter>키>>");
		// <Enter> 키 때가지 기다림
		key = scanner.nextLine(); // <Enter>키를 읽음
		c = Calendar.getInstance();
		int endSecond = c.get(Calendar.SECOND);
		System.out.println("\t현재 초 시간 = " +  endSecond);
		
		if(endSecond < startSecond)
			endSecond += 60; // 60초 후로 만들어야 함
		
		return Math.abs(startSecond-endSecond);  // 절대값 구하기		
	}	
}

public class GuessSecondGame {
	public GuessSecondGame() {
		
	}
	public void run() {
		Player player[] = new Player[2];
		player[0] = new Player("황기태");
		player[1] = new Player("이재문");
	
		System.out.println("10초에 가까운 사람이 이기는 게임입니다.");
		int duration1 = player[0].turn();
		int duration2 = player[1].turn();
		
		System.out.print(player[0].getName()+"의 결과 " + duration1 + ", ");
		System.out.print(player[1].getName()+"의 결과 " + duration2);		
		
		System.out.print(", 승자는 ");
		if(Math.abs(10-duration1) < Math.abs(10-duration2)) // 시간 간격이 작은 사람이 이김
			System.out.println(player[0].getName());
		else
			System.out.println(player[1].getName());			
	}
	
	public static void main(String[] args) {
		GuessSecondGame game = new GuessSecondGame();
		game.run();
	}

}

7번

(1)

import java.util.*;

public class WordCount {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(true) {
			System.out.print(">>");
			String s = scanner.nextLine();
			if(s.equals("그만")) {
				System.out.println("종료합니다...");	
				break;
			}
			StringTokenizer st = new StringTokenizer(s, " ");	
			System.out.println("어절 개수는 " + st.countTokens());
		}
		
		scanner.close();
	}
}

 

(2)

import java.util.*;

public class WordCount {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(true) {
			System.out.print(">>");
			String s = scanner.nextLine();
			if(s.equals("그만")) {
				System.out.println("종료합니다...");	
				break;
			}
			String [] words = s.split(" ");	
			System.out.println("어절 개수는 " + words.length);
		}
		
		scanner.close();
	}
}

 

8번

import java.util.Scanner;

public class StringRotate {

	public static void main(String[] args) {
		System.out.println("문자열을 입력하세요. 빈 칸이나 있어도 되고 영어 한글 모두 됩니다.");
		Scanner scanner = new Scanner(System.in);
		String text = scanner.nextLine();
		int len = text.length();
		for(int i=0; i<len; i++) {
			String first = text.substring(0,1); //인덱스 0에서 1까지 1개 문자
			String last = text.substring(1); // 인덱스 1에서 끌까지
			text = last + first;
			System.out.println(text);
		}
		scanner.close();;
	}

}

9번

import java.util.Scanner;

class Player {
	private String name;
	private Scanner scanner = new Scanner(System.in);
	
	public Player(String name) {
		this.name = name;
	}
	public String getName() { return name; }
	public int turn() {
		System.out.print(name + "[가위(1), 바위(2), 보(3), 끝내기(4)]>>");
		return  scanner.nextInt();
	}
}

class Computer extends Player {
	public Computer(String name) {
		super(name);
	}
	public int turn() {
		return (int)(Math.random() * 3 + 1); // 1부터 3까지의 수
	}	
}

public class Kawibawibo {
	private final String s[] = {"가위", "바위", "보"};
	private Player [] players = new Player[2];

	public Kawibawibo() {
		players[0] = new Player("철수");
		players[1] = new Computer("컴퓨터");
	}
	
	public void run() {
		int userChoice, computerChoice;
		while (true) {
			userChoice = players[0].turn(); // 철수 차례
			if (userChoice == 4) 
				break; // 게임 끝내기
			
			computerChoice = players[1].turn(); // 컴퓨터 차례
			
			if (userChoice < 1 || userChoice > 3) { 
				System.out.println("잘못 입력하셨습니다.");
			} 
			else {
				System.out.print(players[0].getName() + "(" + s[userChoice-1] + ")" + " : ");				
				System.out.println(players[1].getName() + "(" + s[computerChoice-1] + ")");

				int diff = userChoice - computerChoice; 
				switch (diff) {
				case 0: // 같은 것을 낸 경우
					System.out.println("비겼습니다.");
					break;
				case -1: // 사용자가 가위, 컴퓨터가 바위 또는 사용자가 바위, 컴퓨터가 보
				case 2:	// 사용자가 보, 컴퓨터가 가위
					System.out.println(players[1].getName()+"가 이겼습니다.");
					break;
				case 1: // 사용자가 바위, 컴퓨터가 가위 또는 사용자가 보, 컴퓨터가 바위
				case -2: // 사용자가 가위, 컴퓨터가 보
					System.out.println(players[0].getName()+"가 이겼습니다.");
				}
			}
		}	
	}
	
	public static void main (String[] args) {
		Kawibawibo game = new Kawibawibo();
		game.run();
	}
}

10번

import java.util.Scanner;

public class GamblingGame {
	private Player [] p = new Player[2]; // 2대신 3으로 고치면 3명이 하는 게임이 된다.
	private Scanner scanner = new Scanner(System.in);
	
	public GamblingGame() {
		for(int i=0; i<p.length; i++) {
			System.out.print((i+1)+"번째 선수 이름>>");
			p[i] = new Player(scanner.nextLine());
		}
	}
	
	public void run() {
		int i=0;
		while (true) {
			if (p[i].turn()) { // 선수 i의 세 수가 모두 같은 경우
				System.out.println(p[i].getName()+"님이 이겼습니다!");
				break;
			}
			else {
				System.out.println("아쉽군요!");
				i++; // 다음 사람
				i = i%p.length; // 두 사람이 번갈아 게임함
			}
		}
	}
		
	public static void main(String [] args) {
		GamblingGame game = new GamblingGame();
		game.run();
	}
}
import java.util.Scanner;

public class Player {
	private String name;
	private Scanner scanner = new Scanner(System.in);
	public Player(String name) {
		this.name = name;
	}
	public String getName() {return name;}
	public void getEnterKey() {
		scanner.nextLine(); // <Enter> 키를 기다린다.
	} 
	public boolean turn() {
		System.out.print("[" + name + "]:<Enter>");			
		getEnterKey(); // 참가자가 <Enter>키 입력할 때까지 기다림
		
		int num[] = new int [3]; // 3개의 난수를 저장하기 위한 배열
		 // 3개의 난수 생성 
		for (int i=0; i<num.length; i++) {
			num[i] = (int)(Math.random()*3 + 1); // 1~3까지의 임의의 수 발생
		}
		
		 // 3개의 난수 출력
		System.out.print("\t\t");
		for (int i=0; i<num.length; i++) {
			System.out.print(num[i]+"\t");
		}
	
		 // 3개의 난수가 같은지 비교
		boolean result = true;
		for (int i=0; i<num.length; i++) {
			if (num[i] != num[0]) { // 하나라도 다르면 false
				result = false; // 같지 않음
				break;
			}
		}
		
		return result; // result가 true 이면 승리
	}
}

11번

import java.util.Scanner;

public class WordReplace {

	public static void main(String[] args) {
		System.out.print(">>");
		Scanner scanner = new Scanner(System.in);
		String text = scanner.nextLine(); // 한 라인을 문자열로 읽는다.
		StringBuffer sb = new StringBuffer(text);
		
		while(true) {
			System.out.print("명령: ");
			String cmd = scanner.nextLine(); // 한 라인을 문자열로 읽는다.
			if(cmd.equals("그만")) {
				System.out.print("종료합니다");
				break;
			}
			String [] tokens = cmd.split("!");
			if(tokens.length != 2) {
				System.out.println("잘못된 명령입니다!");
			}
			else {
				if(tokens[0].length() == 0 || tokens[1].length() == 0) {
					System.out.println("잘못된 명령입니다!");
					continue;
				}
				
				int index = sb.indexOf(tokens[0]);
				if(index == -1) { // not found!
					System.out.println("찾을 수 없습니다!");
					continue;
				}
				sb.replace(index, index+tokens[0].length(), tokens[1]);
				System.out.println(sb.toString());
			}
		}
		
		scanner.close();

	}

}

12번

import java.util.Scanner;

public class GamblingGame {
	private Player [] p;
	private Scanner scanner = new Scanner(System.in);
	
	public GamblingGame() {
		System.out.print("갬블링 게임에 참여할 선수 숫자>>");
		 
		int nPlayers = scanner.nextInt();
		scanner.nextLine(); // 버퍼에 입력된 <Enter>키 제거. 
		 
		p = new Player[nPlayers]; // 2대신 3으로 고치면 3명이 하는 게임이 된다.		 
		for(int i=0; i<p.length; i++) {
			System.out.print((i+1)+"번째 선수 이름>>");
			p[i] = new Player(scanner.nextLine());
		}
	}
	
	public void run() {
		int i=0;
		while (true) {
			if (p[i].turn()) { // 선수 i의 세 수가 모두 같은 경우
				System.out.println(p[i].getName()+"님이 이겼습니다!");
				break;
			}
			else {
				System.out.println("아쉽군요!");
				i++; // 다음 사람
				i = i%p.length; // 두 사람이 번갈아 게임함
			}
		}
	}
		
	public static void main(String [] args) {
		GamblingGame game = new GamblingGame();
		game.run();
	}
}
import java.util.Scanner;

public class Player {
	private String name;
	private Scanner scanner = new Scanner(System.in);
	public Player(String name) {
		this.name = name;
	}
	public String getName() {return name;}
	public void getEnterKey() {
		scanner.nextLine(); // <Enter> 키를 기다린다.
	} 
	public boolean turn() {
		System.out.print("[" + name + "]:<Enter>");			
		getEnterKey(); // 참가자가 <Enter>키 입력할 때까지 기다림
		
		int num[] = new int [3]; // 3개의 난수를 저장하기 위한 배열
		 // 3개의 난수 생성 
		for (int i=0; i<num.length; i++) {
			num[i] = (int)(Math.random()*3 + 1); // 1~3까지의 임의의 수 발생
		}
		
		 // 3개의 난수 출력
		System.out.print("\t\t");
		for (int i=0; i<num.length; i++) {
			System.out.print(num[i]+"\t");
		}
	
		 // 3개의 난수가 같은지 비교
		boolean result = true;
		for (int i=0; i<num.length; i++) {
			if (num[i] != num[0]) { // 하나라도 다르면 false
				result = false; // 같지 않음
				break;
			}
		}
		
		return result; // result가 true 이면 승리
	}
}
728x90
그리드형

댓글