난이도 6 이상만
6. 경과시간 맞추기 게임 [난이도 6]
- 다음 예시를 참고하여 <Enter> 키를 입력하면 현재 초 시간을 보여주고, 여기서 10초에 더 근접하도록 다음 <Enter> 키를 입력한 사람이 이기는 게임
※<Enter> 키 입력을 위해서 Scanner.nextLine()을 호출하면 된다
Player 클래스
import java.util.Calendar;
public class Player{
Calendar calendar;
String name;
int previous;
int following;
int interval;
public Player(String name) {
this.name=name;
}
public int getPreviousTime() {
calendar=Calendar.getInstance();
previous=calendar.get(Calendar.SECOND);
return previous;
}
public int getFollowingTime() {
calendar=Calendar.getInstance();
following=calendar.get(Calendar.SECOND);
return following;
}
public int getInterval() {
interval=Math.abs(previous-following);
return interval;
}
public int getIntervalWith10() {
return Math.abs(10-interval);
}
}
Game 클래스
import java.util.Scanner;
public class Game {
public void run(Player p) {
Scanner scanner=new Scanner(System.in);
System.out.println();
System.out.print(p.name+" 시작 <Enter>키 >> ");
scanner.nextLine();
System.out.println("현재 초 시간 = "+p.getPreviousTime());
System.out.print("10초 예상 후 <Enter> 키 >> ");
scanner.nextLine();
System.out.println("현재 초 시간 = "+p.getFollowingTime());
}
public void compare(Player p1, Player p2) {
if(p1.getIntervalWith10()<p2.getIntervalWith10())
System.out.println("승자는 "+p1.name);
else if(p1.getIntervalWith10()>p2.getIntervalWith10())
System.out.println("승자는 "+p2.name);
else
System.out.println("비겼습니다");
}
}
TimeEx 클래스(main)
public class TimeEx {
public static void main(String[] args) {
Player p1=new Player("황기태");
Player p2=new Player("이재문");
Game g=new Game();
System.out.println("10초에 가까운 사람이 이기는 게임입니다.");
g.run(p1);
g.run(p2);
System.out.println();
System.out.print(p1.name+"의 결과 "+p1.getInterval()+", "+p2.name+"의 결과 "+p2.getInterval()+", ");
g.compare(p1, p2);
}
}
문제 풀 때 클래스를 따로따로 만드는 경향이 있는데
별 이유는 없고 그냥 그 편이 멋있는 것 같습니다
9. 철수와 컴퓨터의 가위바위보 게임 [난이도 7]
- 가위, 바위, 보는 각각 1, 2, 3 키
- 철수가 키를 입력하면, 동시에 프로그램도 Math.Random()을 이용하여 1, 2, 3 중에 한 수를 발생시키고 이것을 컴퓨터가 낸 것으로 함
- 철수와 컴퓨터 중 누가 이겼는지 판별하여 승자를 출력
>> 실행
Player 클래스
public class Player {
String name;
int input;
String output;
public Player(String name) {
this.name=name;
}
public String showOutput() {
switch(input) {
case 1:
return "가위";
case 2:
return "바위";
case 3:
return "보";
default:
return "";
}
}
public int makeRandom() {
int rand=(int)(Math.random()*3+1); //1부터 3까지 난수 생성
return rand;
}
}
RPSGameEx클래스(main)
import java.util.Scanner;
public class RPSGameEx {
public void run() {
Player p1=new Player("철수");
Player p2=new Player("컴퓨터");
Scanner scanner=new Scanner(System.in);
while(true) {
System.out.print(p1.name+" [가위(1), 바위(2), 보(3), 종료(4)] >> ");
p1.input=scanner.nextInt();
p2.input=p2.makeRandom();
if(p1.input==4) {
System.out.println("종료합니다");
break;
}
System.out.printf("%s(%s) : %s(%s)\n", p1.name, p1.showOutput(), p2.name, p2.showOutput());
compare(p1, p2);
}
}
public void compare(Player p1, Player p2) {
if(p1.input==p2.input)
System.out.println("비겼습니다.");
else if((p1.input==1&&p2.input==3) || (p1.input==2&&p2.input==1) || (p1.input==3&&p2.input==2))
System.out.println(p1.name+"가 이겼습니다."); //철수가 이기는 경우
else
System.out.println(p2.name+"가 이겼습니다."); //컴퓨터가 이기는 경우
System.out.println();
}
public static void main(String[] args) {
RPSGameEx game=new RPSGameEx();
game.run();
}
}
10. 겜블링 게임 [난이도 7]
- 두 사람이 번갈아 가며 게임을 진행
- 이들의 이름을 키보드로 입력받으며 각 사람은 Person 클래스로 작성(->Person 객체 2개 생성)
- 각 사람이 자신의 차례에서 <Enter> 키를 입력하며 3개의 난수가 발생, 이 숫자가 모두 같으면 승리하고 게임 종료
- 난수 범위 1~3으로 설정
>> 실행
Player 클래스
public class Player {
String name;
int n1, n2, n3;
boolean isWinner=false;
public Player(String name) {
this.name=name;
}
public void setAndShowNum() {
n1=(int)(Math.random()*3+1);
n2=(int)(Math.random()*3+1);
n3=(int)(Math.random()*3+1);
System.out.print( " "+n1+" "+n2+" "+n3+" ");
}
public void showResult() {
if(n1==n2&&n2==n3) {
isWinner=true;
System.out.println(name+"님이 이겼습니다!");
}
else
System.out.println("아쉽군요!");
}
}
GamblingEx 클래스(main)
import java.util.Scanner;
public class GamblingEx {
public void run() {
Player[] p = new Player[2]; //두 사람이 진행
Scanner scanner=new Scanner(System.in);
for(int i=0; i<p.length; i++) {
System.out.print(i+1+"번째 선수 이름 >> ");
p[i]=new Player(scanner.next());
}
System.out.println();
scanner.nextLine(); //Enter 입력
while(true) {
for(int i=0; i<2; i++) {
System.out.printf("[%s]: <Enter>", p[i].name);
scanner.nextLine();
p[i].setAndShowNum();
p[i].showResult();
if(p[i].isWinner==true) return;
}
}
}
public static void main(String[] args) {
new GamblingEx().run();
}
}
11. StringBuffer 클래스를 활용하여 문자열 수정하기 [난이도 6]
>> 실행
- 첫 줄에 원본 문자열을 입력
- 명령으로 원래 문자!변경할 문자 입력
String 클래스로 풀이
import java.util.*;
public class EditStringEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(">> ");
String string = scanner.nextLine();
while(true){
System.out.print("명령: ");
String input = scanner.next();
if(input.equals("그만")){
System.out.println("종료합니다.");
return;
}
else{
StringTokenizer st=new StringTokenizer(input, "!'");
if (st.countTokens()<2){
System.out.println("잘못된 명령입니다!");
continue;
}
else{
String org = st.nextToken();
String change = st.nextToken();
if(string.contains(org)){
string = string.replace(org, change);
System.out.println(string);
}
else{
System.out.println("찾을 수 없습니다!");
continue;
}
}
}
}
}
}
문제를 제대로 안 읽어서 String으로 풀었네요 ㅋ
StringBuffer 클래스로 풀이
import java.util.*;
public class EditStringEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(">> ");
StringBuffer stringBuffer = new StringBuffer(scanner.nextLine());
while(true) {
System.out.print("명령: ");
String input = scanner.next();
if(input.equals("그만")) {
System.out.println("종료합니다.");
return;
}
else {
StringTokenizer st = new StringTokenizer(input, "!'");
if (st.countTokens()<2) {
System.out.println("잘못된 명령입니다!");
continue;
}
else {
String org=st.nextToken();
String change=st.nextToken();
int start=stringBuffer.indexOf(org);
if (start =-1) {
int end = start + org.length();
stringBuffer.replace(start, end, change);
System.out.println(stringBuffer.toString());
}
else {
System.out.println("찾을 수 없습니다!");
continue;
}
}
}
}
}
}
12. 문제 10의 겜블링 게임을 n명이 플레이하도록 수정하기 [난이도 8]
- 게임에 참여하는 선수의 수를 입력받고
- 각 선수의 이름을 입력받도록 수정
>> 실행
Player 클래스
- 10번이랑 똑같다
public class Player {
String name;
int n1, n2, n3;
boolean isWinner=false;
public Player(String name) {
this.name=name;
}
public void setAndShowNum() {
n1=(int)(Math.random()*3+1);
n2=(int)(Math.random()*3+1);
n3=(int)(Math.random()*3+1);
System.out.print( " "+n1+" "+n2+" "+n3+" ");
}
public void showResult() {
if(n1==n2&&n2==n3) {
isWinner=true;
System.out.println(name+"님이 이겼습니다!");
}
else
System.out.println("아쉽군요!");
}
}
GamblingEx 클래스(main)
import java.util.Scanner;
public class GamblingEx {
public void run() {
Scanner scanner=new Scanner(System.in);
System.out.print("게임에 참여할 선수 숫자>> ");
int playerNum=scanner.nextInt();
Player[] p = new Player[playerNum]; //입력받은 만큼
for(int i=0; i<p.length; i++) {
System.out.print(i+1+"번째 선수 이름 >> ");
p[i]=new Player(scanner.next());
}
System.out.println();
scanner.nextLine(); //Enter 입력
while(true) {
for(int i=0; i<p.length; i++) {
System.out.printf("[%s]: <Enter>", p[i].name);
scanner.nextLine();
p[i].setAndShowNum();
p[i].showResult();
if(p[i].isWinner==true) return;
}
}
}
public static void main(String[] args) {
new GamblingEx().run();
}
}
그냥 객체 배열 쓰라는 것 같은데 어쩌다 보니 10번 풀 때도 객체 배열로 풀었어서 조금만 수정했습니다
'java > 예제&실습' 카테고리의 다른 글
[명품자바] 7장 실습문제(10~13) (0) | 2024.07.01 |
---|---|
[명품자바] 7장 실습문제(5~9) (0) | 2024.07.01 |
[명품자바] 8장 오픈챌린지 (0) | 2024.06.25 |
[명품자바] 7장 오픈챌린지 (0) | 2024.06.20 |
[명품자바] 6장 오픈챌린지 (0) | 2024.06.19 |