고뇌
문방구 게임 왜 오류가 날까..
사재원 교수
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학생");
}
}
}
이 문제를 이해하는데 꽤 많은 시간을 들였다.... 비로소 어느정도 이해를 해서 스스로 코드를 치게 됬는데 뭔가 자꾸 오류가 난다..... 강사님께 일단 이메일을 보내놓은 상태 ... !! 목이 아프구나
---------------------------------------------------------------------------------------------------------------------------------
원인 찾음
학생 필통에 연필을 넣어주는 과정에서 참조 자료형이 잘못되었음
학생 필통안 연필 객체 안에 넣어줘야하는데 펜 객체에 넣어서 오류가 생겼음.