고뇌

문방구 게임 왜 오류가 날까..

사재원 교수 2022. 5. 24. 23:23
package hihihi;

import java.util.Scanner;

class Pencil{
	String color;
	Pencil(String color){
		this.color = color;
	}
}

class Eraser{
	String color;
	Eraser(String color){
		this.color = color;
	}
}

class Pan{
	String color;
	Pan(String color){
		this.color = color;
	}
}

class Piltong{
	Pencil pn1;
	Pencil pn2;
	Eraser e;
	Pan p1;
	Pan p2;
}

class Student{
	Piltong p;
	Student(){
		p = new Piltong();
	}
}

class Munbanggu{
	Pencil[] pn = new Pencil[4];
	Eraser[] e = new Eraser[2];
	Pan[] p = new Pan[4];
	Munbanggu() {
		String[] color = {"빨간색","주황색","노란색","초록색"};
		String[] color2 = {"회색","검은색"};
		
		for(int i=0;i<color.length;i++) {
			pn[i] = new Pencil(color[i]);
			p[i] = new Pan(color[i]);
		}
		
		for(int i=0;i<e.length;i++) {
			e[i] = new Eraser(color2[i]);
		}
	}
}


public class protect {
	
	static boolean check(Munbanggu mun) {
		for(int i=0;i<mun.pn.length;i++) {
			if(mun.pn[i] != null) {
				return true;
			}
		}
		System.out.println("색연필이 다 팔렸습니다.");
		return false;
	}
	static void pencilBuy(Scanner sc,Munbanggu mun,Student a,String name) {
		System.out.println(name + " 색연필 색깔을 골라주세요 : ");
		String color = sc.next();
		
		while(!(color.equals("빨간색")||color.equals("주황색")||color.equals("노란색")||color.equals("초록색"))) {
			System.out.println(name + " 색연필 색깔을 골라주세요 : ");
			color = sc.next();
		}
		//색 선택 완료
		int i;
		for(i=0;i<mun.pn.length;i++) {
			if(mun.pn[i] != null) {
				if(mun.pn[i].equals(color)) {
					if(a.p.p1 == null) {
						a.p.p1 = mun.pn[i]; /* 오류 지점 */ /* 오류 지점 */ /* 오류 지점 */
						mun.pn[i] = null;
					}else if(a.p.p2 == null) {
						a.p.p2 = mun.pn[i]; /* 오류 지점 */ /* 오류 지점 */ /* 오류 지점 */
						mun.pn[i] = null; 
					}else {
						System.out.println("필통이 꽉 찼습니다");
						break;
					}
					System.out.println(color+"연필을 샀습니다.");
		            break;
				}
			}
		}
		if(i==mun.pn.length) {
			System.out.println("색연필이 다 팔렸습니다");
		}
	}
	
	
	
	public static void main(String[] args) {
		
	      Scanner sc = new Scanner(System.in);
	      Munbanggu mun = new Munbanggu();
	      Student a = new Student();
	      Student b = new Student();

	      while(check(mun)) {
	         //체크 문방구 연필이 다팔렸는지 확인
	         pencilBuy(sc, mun, a, "A학생");
	         pencilBuy(sc, mun, b, "B학생");
	      }

		
	}
}

이 문제를 이해하는데 꽤 많은 시간을 들였다.... 비로소 어느정도 이해를 해서 스스로 코드를 치게 됬는데 뭔가 자꾸 오류가 난다..... 강사님께 일단 이메일을 보내놓은 상태 ... !! 목이 아프구나

 

 

---------------------------------------------------------------------------------------------------------------------------------

원인 찾음

학생 필통에 연필을 넣어주는 과정에서 참조 자료형이 잘못되었음

학생 필통안 연필 객체 안에 넣어줘야하는데 펜 객체에 넣어서 오류가 생겼음.