basic/java 실습

day 12 연습문제(3) - class(지금까지 배운 것 전부 활용)(난이도상)

못지(Motji) 2021. 5. 14. 00:28

📘  n명이 참가하는 끝말 잇기 게임만들어 보자

처음 단어는 "자동차"이다. n명의 참가자들은 순서대로 자신의 단어를 입력하면 된다. 
끝말잇기에서 틀리면 게임오버 -> 진사람이름 출력, 종료
WordGameApp 클래스와 각 선수를 나타내는 Player 클래스 작성 .
WordGameApp : 게임을 전체적으로 진행하는 run()메서드, run()에서 플레이어수만큼 Player객체 배열 생성
Player : 플레이어 이름, 단어 입력받는 getWordFromUser()메서드, 끝말잇기 성공여부와 게임계속할지 판별하는 checkSuccess() 메서드 
#tip:문자열 첫번째 문자 알아내는 방법은  .charAt(인덱스번호) 사용 

package day12;
import java.util.Scanner;
class Player {
	Scanner sc = new Scanner(System.in);
	private String name;
	private String inputWord;
	
	void setinfo(){
		System.out.println("이름을 입력하세요");
		name = sc.nextLine();
	}
	
	public String getName() {
		return name;
	}

	String getWordFromUser() { // 단어 입력받는 메소드
		System.out.println(name + ">>"); // 이름 띄워주고 단어 입력 받기
		inputWord = sc.nextLine();
		return inputWord; // 입력받은 단어를 돌려줘야지 체크할 수 있기 때문에
	}
	boolean checkSuccess(String startWord){ // 들어온 단어 마지막에 있는 문자와 입력한 단어 첫번째 문자 비교해주기
		boolean resualt = true;
		if(startWord.charAt(startWord.length()-1) == inputWord.charAt(0)){// 단어길이 - 1 한게 마지막번째 문자자리수가 되고, 첫번째 문자는 언제나 0번째
			return resualt; // 비교해서 맞을경우 true 리턴
		} return !resualt; // 아닐 경우 false 리턴
		}
	
}
class WordGameApp {
	Scanner sc = new Scanner(System.in);
	
	void run(){
		System.out.println("끝말잇기 게임 Start!");
		System.out.println("참가 인원수를 입력하시오");
		int userNum = Integer.parseInt(sc.nextLine());
		// 참가자 수만큼 배열방 만들어주기 
		Player [] p = new Player[userNum]; // 배열방만 만든상태 값 없음
		// 배열 객체 생성해주기
		for(int i = 0; i<p.length; i++) {
			p[i] = new Player();
		}
		// 참가자수만큼 참가자 이름 받아서 각 객체 배열에 넣어주기
		for(int i = 0; i<p.length; i++) {
			p[i].setinfo();
		}
		// 처음 시작 단어 저장
		String startWord = "자동차";
		System.out.println("시작 단어는 " + startWord + "입니다.");
		// 한명이 잘못 입력할때까지 게임이 돌아가야 함 > 언제 끝날지 모름 > 무한반복
		boolean play = true;
		while(play) {
			for(int i = 0; i<p.length; i++) { // 게임인원수만큼 반복
			String inputWord = p[i].getWordFromUser(); // 첫번째 유저가 단어 입력 받음 변수에 받아줘야함
			// 시작단어와, 입력받은 단어 비교해주기
			// 입력받은 단어는 player 객체에 변수 선언하여 저장되어 있으니 시작단어 던져주기
			boolean resalt = p[i].checkSuccess(startWord); // t/f로 체크 가능하니 boolean 타입의 변수 만들어서 값 넣어주자
			if(resalt == true) {
				System.out.println(inputWord); // 입력단어 출력해주고
				startWord = inputWord; // 비교해줄 단어가 되어야하니까 startWord에 넣어주기
			}else{
				System.out.println(p[i].getName() + " 게임종료!");
				i = p.length; // for문 끝내주기
				play = false; // while문 끝내주기
			}
			}
				
		}
		
	}
	
}

public class ClassTest01 {
	public static void main(String[] args) {
		// main 메서드는 아래 두줄로 작성 끝. 실행하면 게임시작되게 하기. 
		WordGameApp app = new WordGameApp();
		app.run();
	}
}

🖥️ console 출력 화면

🔈 차근차근 한씩 풀어 나가니까 혼자 작성할 수 있었다!!!!!! 수업시간에 선생님 해설은 한번 듣긴 했지만ㅎㅎ 기특하다 내자신

 

📘 콘서트 예약 프로그램을 만들어보자. 프로그램 기능은 아래와 같다

더보기

콘서트 예약 프로그램. 
- 공연은 하루에 한번
- 좌석은 S석, A석, B석으로 나뉘며, 각각 10개의 좌석이 있다. 
- 예약 시스템의 메뉴는 "예약", "조회", "취소", "끝내기"가 있다. 
- 예약은 한자리만 가능하고, 좌석타입, 예약자이름, 좌석번호를 입력받아 예약한다.
- 조회는 모든 좌석을 출력한다.
- 취소는 예약자의 이름을 입력받아 취소한다.
- 없는 이름, 없는 번호, 없는 메뉴, 잘못된 취소등에 대해서
  오류 메세지를 출력하고 사용자가 다시 시도하도록 한다.
# 실행예시 #
자바콘서트홀 예약시스템입니다.
예약:1, 조회:2, 취소:3, 끝내기:4 >> 1
좌석구분 S(1), A(2), B(3) >> 1
S >> ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ 
이름 >> 피카츄
번호 >> 1
<<예약완료>>

예약:1, 조회:2, 취소:3, 끝내기:4 >> 1
좌석구분 S(1), A(2), B(3) >> 2
A >> ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
이름 >> 꼬북이
번호 >> 5
<<예약완료>>

예약:1, 조회:2, 취소:3, 끝내기:4 >> 2
S >> 피카츄 ___ ___ ___ ___ ___ ___ ___ ___ ___
A >> ___ ___ ___ ___ 꼬북이 ___ ___ ___ ___ ___
B >> ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
<<조회완료>>

예약:1, 조회:2, 취소:3, 끝내기:4 >> 3
좌석구분 S(1), A(2), B(3) >> 2
A >> ___ ___ ___ ___ 꼬북이 ___ ___ ___ ___ ___
이름 >> 꼬북이
<<취소완료>>

예약:1, 조회:2, 취소:3, 끝내기:4 >> 2
S >> 피카츄 ___ ___ ___ ___ ___ ___ ___ ___ ___
A >> ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
B >> ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
<<조회완료>>

예약:1, 조회:2, 취소:3, 끝내기:4 >> 4
<<프로그램 종료>>

package day12;
import java.util.Scanner;
class Seat{
	Scanner sc = new Scanner(System.in);
	//좌석 객체 생성
	//좌석 정보 저장
	String [] seatS = new String[10];
	String [] seatA = new String[10];
	String [] seatB = new String[10];
	
	Seat() {
		for(int i = 0; i<seatS.length; i++) {
			seatS[i] = "___";
			seatA[i] = "___";
			seatB[i] = "___";
		}
	}
	void seatS() {
		System.out.print("S >> ");
		for(int i = 0; i<seatS.length; i++) {
			System.out.print(seatS[i] + " ");
		}
		System.out.println();
	}
	void seatA() {
		System.out.print("A >> ");
		for(int i = 0; i<seatS.length; i++) {
			System.out.print(seatA[i] + " ");
		}
		System.out.println();
	}
	void seatB() {
		System.out.print("B >> ");
		for(int i = 0; i<seatS.length; i++) {
			System.out.print(seatB[i] + " ");
		}
		System.out.println();
	}
	
}


class Booking {
	Scanner sc = new Scanner(System.in);
	Seat s = new Seat();
	
	void booking() {
		System.out.println("좌석구분 S(1), A(2), B(3) >>");
		int seatNum = Integer.parseInt(sc.nextLine());
		if(seatNum == 1) {
			s.seatS();
			System.out.println("이름 >>");
			String name = sc.nextLine();
			System.out.println("번호 >>");
			int num = Integer.parseInt(sc.nextLine());
			s.seatS[num-1] = name;
			System.out.println("예약완료");
		}else if(seatNum == 2) {
			s.seatA();
			System.out.println("이름 >>");
			String name = sc.nextLine();
			System.out.println("번호 >>");
			int num = Integer.parseInt(sc.nextLine());
			s.seatA[num-1] = name;
			System.out.println("예약완료");
		}else if(seatNum == 3) {
			s.seatB();
			System.out.println("이름 >>");
			String name = sc.nextLine();
			System.out.println("번호 >>");
			int num = Integer.parseInt(sc.nextLine());
			s.seatB[num-1] = name;
			System.out.println("예약완료");
		}
	}
	void cencel() {
		System.out.println("좌석구분 S(1), A(2), B(3) >> 2");
		int seatNum = Integer.parseInt(sc.nextLine());
		if(seatNum ==1) {
			s.seatS();
			System.out.println("이름 >> ");
			String name = sc.nextLine();
			for(int i= 0; i<s.seatS.length; i++) {
				if(name == s.seatS[i]) {
					s.seatS[i] = "___";
					i = s.seatS.length;
				}
			}
			System.out.println("취소완료");
		}
		else if(seatNum ==2) {
			s.seatA();
			System.out.println("이름 >> ");
			String name = sc.nextLine();
			for(int i= 0; i<s.seatA.length; i++) {
				if(name == s.seatA[i]) {
					s.seatA[i] = "___";
					i = s.seatS.length;
				}
			}
			System.out.println("취소완료");
		}
		else if(seatNum ==3) {
			s.seatB();
			System.out.println("이름 >> ");
			String name = sc.nextLine();
			for(int i= 0; i<s.seatB.length; i++) {
				if(s.seatB.equals(name)){
					s.seatB[i] = "___";
					i = s.seatB.length;
				}
			}
			System.out.println("취소완료");
		}
	}
	void view() {
		s.seatS();
		s.seatA();
		s.seatB();
	}
	void end() {
		System.out.println("<<프로그램 종료>>");
	}
	
	void run() {
		boolean play = true;
		System.out.println("자바콘서트홀 예약시스템입니다.");
		
		while(play) {
			System.out.println("예약:1, 조회:2, 취소:3, 끝내기:4 >>");
			int num = Integer.parseInt(sc.nextLine());
			if(num == 1) { 
				booking();
			}else if(num == 2) {
				view();
			}else if(num == 3) {
				cencel();
			}else if(num == 4 ) {
				end();
				play = !play;
			}else {
				System.out.println("잘못입력 하셨습니다. 다시 선택해주세요");
			}
		
		}
		
	}
	
}

public class ClassTest07 {
	public static void main(String[] args) {
		Booking b = new Booking();
		b.run();
	}
}

🖥️ console 출력 화면

🔈 3번 취소 기능이 안된다..내일 다시 고고..