1. 다음 main( )이 실행되면 아래 예시와 같이 출력되도록 MyPoint 클래스를 작성하라.
public class MyPoint {
private int x;
private int y;
MyPoint (int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "Point(" + x + "," + y + ")";
}
public boolean equals (MyPoint mp) {
if (this.x == mp.x && this.y == mp.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. 중심을 나타내는 정수 x, y와 반지름 radius 필드를 가지는 Circle 클래스를 작성하고자 한다.
2. 생성자는 3개의 인자(s, y, radius)를 받아 해당 필드를 초기화하고,
2. equals( ) 메소드는 두 개의 Circle 객체의 중심이 같으면 같은 것으로 판별하도록 한다.
public class Circle {
private int x;
private int y;
private int radius;
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 (Circle c) {
if (this.x == c.x && this.y == c.y)
return true;
else
return false;
}
public static void main(String[] args) {
Circle a = new Circle(2, 3, 5); // 중심 (2,3)에 반지름 5인 원
Circle b = new Circle(2, 3, 50); // 중심 (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. 다음 코드를 수정하여, Calc 클래스는 etc 패키지에, MainApp 클래스는 main 패키지로 분리 작성하라.
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 etc;
import etc.Calc;
public class MainApp {
public static void main(String[] args) {
Calc c = new Calc(10, 20);
System.out.println(c.sum());
}
}
4. 다음 코드를 수정하여 Shape 클래스는 base 패키지에, Circle 클래스는 derived 패키지에,
4. GraphicEditor 클래스는 app 패키지에 분리 작성하라.
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"); }
}
package app;
import base.Shape;
import derived.Circle;
public class GraphicEditor {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
}
}
5. Calendar 객체를 생성하면 현재 시간을 알 수 있다.
5. 프로그램을 실행한 현재 시간이 새벽 4시에서 낮 12시 이전이면 "Good Morning"을,
5. 오후 6시 이전이면 "Good Afternoon"을,
5. 밤 10시 이전이면 "Good Evening"을,
5. 그 이후는 "Good Night"을 출력하는 프로그램을 작성하라.
import java.util.Calendar;
public class CalendarApp {
public static void main(String[] args) {
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
if (hour >= 4 && hour < 12)
System.out.println("현재 시간은 " + hour + "시" + minute + "분입니다.\nGood Morning");
else if (hour >= 12 && hour < 18)
System.out.println("현재 시간은 " + hour + "시" + minute + "분입니다.\nGood Afternoon");
else if (hour >= 18 && hour < 22)
System.out.println("현재 시간은 " + hour + "시" + minute + "분입니다.\nGood Evening");
else
System.out.println("현재 시간은 " + hour + "시" + minute + "분입니다.\nGood Night");
}
}
6. 경과시간을 맞추는 게임을 작성하라.
6. 다음 예시를 참고하면, <Enter> 키를 입력하면 현재 초 시간을 보여주고
6. 여기서 10초에 더 근접하도록 다음 <Enter>키를 입력한 사람이 이기는 게임이다.
import java.util.Calendar;
import java.util.Scanner;
public class Person {
private String name;
private int time;
public void setName (String name) {
this.name = name;
}
public void setTime (int time) {
this.time = time;
}
public String getName() {
return this.name;
}
public int getTime() {
return this.time;
}
}
public class Game {
private Scanner scanner;
private Person p [];
private int num;
private int secondNow;
private int secondTenAfter;
Game() {
num = 2;
p = new Person [num];
scanner = new Scanner(System.in);
}
public void setNames() {
for (int i = 0; i < num; i++) {
System.out.print("이름 입력 : ");
String name = scanner.nextLine();
p[i] = new Person();
p[i].setName(name);
}
}
public void run() {
setNames();
for (int i = 0; i < num; i++) {
System.out.print(p[i].getName() + " 시작 <Enter>키>>");
String enter = scanner.nextLine();
Calendar now = Calendar.getInstance();
secondNow = now.get(Calendar.SECOND);
System.out.println("\t현재 초 시간 = " + secondNow);
System.out.print("10초 예상 후 <Enter>키>>");
enter = scanner.nextLine();
Calendar tenAfter = Calendar.getInstance();
secondTenAfter = tenAfter.get(Calendar.SECOND);
System.out.println("\t현재 초 시간 = " + secondTenAfter);
if (secondNow > secondTenAfter)
p[i].setTime(Math.abs(secondTenAfter + 60 - secondNow));
else
p[i].setTime(Math.abs(secondNow - secondTenAfter));
}
for (int i = 0; i < num; i++)
System.out.print(p[i].getName() + "의 결과 " + p[i].getTime() + ", ");
int min = Math.abs(10 - p[0].getTime());
String minName = p[0].getName();
for (int i = 1; i < num; i++) {
if (Math.abs(10 - p[i].getTime()) < min) {
min = p[i].getTime();
minName = p[i].getName();
}
}
System.out.println("승자는 " + minName);
}
public static void main(String[] args) {
Game game = new Game();
System.out.println("10초에 가까운 사람이 이기는 게임입니다.");
game.run();
}
}
7. Scanner를 이용하여 한 라인을 읽고,
7. 공백으로 분리된 어절이 몇 개 들어 있는지 "그만"을 입력할 때까지 반복하는 프로그램을 작성하라.
7. (1) StringTokenizer 클래스를 이용하여 작성하라.
import java.util.StringTokenizer;
import java.util.Scanner;
public class StringTokenizerEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.nextLine();
if (str.equals("그만")) {
System.out.println("종료합니다...");
System.exit(0);
}
StringTokenizer st = new StringTokenizer(str, " ");
int total = st.countTokens();
System.out.println("어절 개수는 " + total);
}
}
}
7. (2) String 클래스의 split( ) 메소드를 이용하여 작성하라.
import java.util.Scanner;
public class GameApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.nextLine();
if (str.equals("그만")) {
System.out.println("종료합니다...");
System.exit(0);
}
String [] total = str.split(" ");
System.out.println("어절 개수는 " + total.length);
}
}
}
8. 문자열을 입력받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class GameApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("문자열을 입력하세요. 빈칸이 있어도 되고 영어 한글 모두 됩니다.");
String str = scanner.nextLine();
for (int i = 0; i < str.length(); i++) {
System.out.print(str.substring(i+1));
System.out.println(str.substring(0, i+1));
}
}
}
}
9. 철수와 컴퓨터의 가위바위보 게임을 만들어보자.
9. 가위, 바위, 보는 각각 1, 2, 3 키이다.
9. 철수가 키를 입력하면, 동시에 프로그램도 Math.Random( )을 이용하여 1, 2, 3 중에 한 수를 발생시키고
9. 이것을 컴퓨터가 낸 것으로 한다.
9. 그런 다음 철수와 컴퓨터 중 누가 이겼는지 판별하여 승자를 출력하라.
import java.util.Scanner;
public class GameApp {
private Scanner scanner;
GameApp() {
scanner = new Scanner(System.in);
}
void finish() { // 끝내기
System.exit(0);
}
void run() {
while(true) {
System.out.print("철수[가위(1), 바위(2), 보(3), 끝내기(4)]>>");
int num = scanner.nextInt();
int computer = (int)(Math.random() * 3 + 1);
switch (num) {
case 1:
if(computer == 1)
System.out.println("철수(가위) : 컴퓨터(가위)\n비겼습니다.");
else if(computer == 2)
System.out.println("철수(가위) : 컴퓨터(바위)\n컴퓨터가 이겼습니다.");
else if(computer == 3)
System.out.println("철수(가위) : 컴퓨터(보)\n철수가 이겼습니다.");
break;
case 2:
if(computer == 1)
System.out.println("철수(바위) : 컴퓨터(가위)\n철수가 이겼습니다.");
else if(computer == 2)
System.out.println("철수(바위) : 컴퓨터(바위)\n비겼습니다.");
else if(computer == 3)
System.out.println("철수(바위) : 컴퓨터(보)\n컴퓨터가 이겼습니다.");
break;
case 3:
if(computer == 1)
System.out.println("철수(보) : 컴퓨터(가위)\n컴퓨터가 이겼습니다.");
else if(computer == 2)
System.out.println("철수(보) : 컴퓨터(바위)\n철수가 이겼습니다.");
else if(computer == 3)
System.out.println("철수(보) : 컴퓨터(보)\n비겼습니다.");
break;
case 4:
finish();
break;
}
}
}
public static void main(String[] args) {
GameApp gameApp = new GameApp();
gameApp.run();
scanner.close();
}
}
10. 갬블링 게임을 만들어보자.
10. 두 사람이 게임을 진행한다.
10. 이들의 이름을 키보드로 입력받으며 각 사람은 Person 클래스로 작성하라.
10. 그러므로 프로그램에는 2개의 Person 객체가 생성되어야 한다.
10. 두 사람은 번갈아 가면서 게임을 진행하는데
10. 각 사람이 자기 차례에서 <Enter> 키를 입력하면, 3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다.
10. 난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 숫자의 범위는 1~3까지로 한다.
import java.util.Scanner;
public class Person {
private String name;
private int num [];
private int size;
Person() {
this.name = name;
size = 3;
num = new int [size];
}
public void putName (String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void randomNum() {
for (int i = 0; i < size; i++)
num[i] = (int)(Math.random() * 3 + 1);
}
public void show() {
System.out.print("\t");
for (int i = 0; i < size; i++)
System.out.print(num[i] + " ");
}
public boolean result() {
for (int i = 0; i < size - 1; i++) {
if (num[i] != num[i + 1])
return false;
}
return true;
}
}
public class GameApp {
private Scanner scanner;
private Person p1;
private Person p2;
GameApp() {
scanner = new Scanner(System.in);
p1 = new Person();
p2 = new Person();
}
void finish() {
System.exit(0);
}
void run() {
System.out.print("1번째 선수 이름>>");
String name = scanner.nextLine();
p1.putName(name);
System.out.print("2번째 선수 이름>>");
name = scanner.nextLine();
p2.putName(name);
while (true) {
System.out.print("[" + p1.getName() + "]:<Enter>");
String enter = scanner.nextLine();
p1.randomNum();
p1.show();
if (p1.result()) {
System.out.println(p1.getName() + "님이 이겼습니다.");
finish();
}
else
System.out.println("아쉽군요!");
System.out.print("[" + p2.getName() + "]:<Enter>");
enter = scanner.nextLine();
p2.randomNum();
p2.show();
if (p2.result()) {
System.out.println(p2.getName() + "님이 이겼습니다.");
finish();
}
else
System.out.println("아쉽군요!");
}
}
public static void main(String[] args) {
GameApp gameApp = new GameApp();
gameApp.run();
}
}
11. StringBuffer 클래스를 활용하여 명령처럼 문자열을 수정하라.
11. 아래 실행 예시에서 love!LOVE는 love를 찾아 LOVE로 수정하라는 명령이다.
11. 첫 번재 만난 문자열만 수정한다.
import java.lang.StringBuffer;
import java.util.Scanner;
public class GameApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(">>");
String str = scanner.nextLine();
while (true) {
System.out.print("명령: ");
String order = scanner.next();
if (order.equals("그만")) {
System.out.println("종료합니다");
System.exit(0);
}
if (order.charAt(0) == '!' || order.charAt(order.length() - 1) == '!' || !order.contains("!")) {
System.out.println("잘못된 명령입니다!");
continue;
}
String orderIndex [] = order.split("!");
String strChange = str.replace(orderIndex[0], orderIndex[1]);
if (str == strChange) {
System.out.println("찾을 수 없습니다!");
continue;
}
else {
System.out.println(strChange);
str = strChange;
}
}
}
}
12. 문제 10의 갬블링 게임을 n명이 하도록 수정하라.
12. 실행 예시와 같이 게임에 참여하는 선수의 수를 입력받고 각 선수의 이름을 입력받도록 수정하라.
import java.util.Scanner;
public class Person {
private String name;
private int num [];
private int size;
Person() {
this.name = name;
size = 3;
num = new int [size];
}
public void putName (String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void randomNum() {
for (int i = 0; i < size; i++)
num[i] = (int)(Math.random() * 3 + 1);
}
public void show() {
System.out.print("\t");
for (int i = 0; i < size; i++)
System.out.print(num[i] + " ");
}
public boolean result() {
for (int i = 0; i < size - 1; i++) {
if (num[i] != num[i + 1])
return false;
}
return true;
}
}
public class GameApp {
private Scanner scanner;
private Person p [];
private int n;
GameApp() {
scanner = new Scanner(System.in);
}
void finish() {
System.exit(0);
}
void run() {
System.out.print("겜블링 게임에 참여할 선수 숫자>>");
this.n = scanner.nextInt();
p = new Person [n];
for (int i = 0; i < this.n; i++) {
System.out.print((i + 1) + "번째 선수 이름>>");
String name = scanner.next();
p[i] = new Person();
p[i].putName(name);
String enter = scanner.nextLine();
}
while (true) {
for (int i = 0; i < n; i++) {
System.out.print("[" + p[i].getName() + "]:<Enter>");
String enter = scanner.nextLine();
p[i].randomNum();
p[i].show();
if (p[i].result()) {
System.out.println(p[i].getName() + "님이 이겼습니다.");
finish();
}
else
System.out.println("아쉽군요!");
}
}
}
public static void main(String[] args) {
GameApp gameApp = new GameApp();
gameApp.run();
}
}
'withTextBook > 명품 JAVA 프로그래밍' 카테고리의 다른 글
[Chapter 6_OpenChallenge] 영문자 히스토그램 만들기 (0) | 2021.04.17 |
---|---|
[Chapter5_실습문제] (0) | 2021.04.16 |
[Chapter5_OpenChallenge] Bear의 Fish 먹기 게임 만들기 (0) | 2021.04.16 |
[Chapter4_실습문제] (0) | 2021.04.14 |
[Chapter4_OpenChallenge] 끝말잇기 게임 만들기 (0) | 2021.04.14 |