프로그래밍 언어 복습/JAVA
#42 JAVA 원숭이 5마리 물건 돌리기 클래스화 문제
사재원 교수
2022. 5. 27. 18:49
문제를 잘 이해를 못했는데 내가 이해한게 맞다면 이것이 맞을것이다 !
오른쪽으로 이동되는건 잘 되는데 왼쪽으로 이동되는게 안되서 어젯밤 1시간반가량동안 머리를 쥐어뜯었다.
결국 강사님께 이메일로 질문을 드렸는데 진짜 바보...... 왼쪽 인덱스로 갈려면 마이너스(-)를 해줬어야했는데 플러스(+)를 해주어서 계속 이상하게 이동됬던 것 이었다.
이렇게 간단한 문제를 못 찾다니 ..... 강사님이 보시고 피드백을 해주시면 항상 바보가 되는 기분이다 ㅠㅠ
쨌든 정답 코드 공개 !
package NewProject;
import java.util.Random;
import java.util.Scanner;
class Monkey{
String color;
int bomul;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getBomul() {
return bomul;
}
public void setBomul(int bomul) {
this.bomul = bomul;
}
//원숭이가 말하기
public void print() {
if(bomul==1) {
System.out.println(getColor() + " 원숭이가 물건을 가지고 있습니다.");
}else {
System.out.println(getColor() + " 원숭이가 물건을 가지고 있지 않습니다.");
}
}
}
class GameStart{
Random r = new Random();
Monkey[] mk = new Monkey[5];
String[] color = {"빨강","노랑","파랑","초록","검정"};
int[] num = {1,0,0,0,0}; //1이란 숫자를 상자로 간주함
GameStart() {
//5마리의 원숭이 객체를 만들어주고 각각 색과 상자를 넣어줌
for(int i=0;i<mk.length;i++) {
//원숭이 객체 5개 만들기
mk[i] = new Monkey();
//원숭이 객체에 순서대로 색깔과 상자여부를 넣어줌
mk[i].setColor(color[i]);
mk[i].setBomul(num[i]);
}
}
public void give() {
Scanner sc = new Scanner(System.in);
int start = 0; //시작 인덱스 (빨간원숭이)
while(true) {
System.out.println("물건 돌리기 시작(1) 종료(2)");
int start2 = sc.nextInt();
int index = 0;
if(start2 == 1) {
int a = r.nextInt(2); // 1(우), 0(좌)
int b = r.nextInt(5)+1; //1 ~ 5 이동거리
System.out.println(a);
System.out.println(b);
if(a == 1) { //오른쪽으로 이동
System.out.println("오른쪽으로 이동");
if(start+b > 4) { //오른쪽으로 이동때 인덱스 4를 초과했을경우
index = (start + b - 4) -1; //초과한 값만큼을 추출하여 거기서 -1
int first = mk[start].bomul;
int second = mk[index].bomul;
mk[start].setBomul(second);
mk[index].setBomul(first);
}else {
index = start + b;
int first = mk[start].bomul;
int second = mk[index].bomul;
mk[start].setBomul(second);
mk[index].setBomul(first);
}
}else if(a == 0){//왼쪽으로 이동
System.out.println("왼쪽으로 이동");
if(start-b < 0) { //오른쪽으로 이동때 인덱스 0를 미만했을 경우
index = (4-start-b) +1; //미만한 값만큼을 추출하여 거기서 +1
int first = mk[start].bomul;
int second = mk[index].bomul;
mk[start].setBomul(second);
mk[index].setBomul(first);
}else {
index = start - b;
int first = mk[start].bomul;
int second = mk[index].bomul;
mk[start].setBomul(second);
mk[index].setBomul(first);
}
}
int j = 0;
for(int i=0;i<mk.length;i++) {
mk[i].print();
if(mk[i].bomul == 1) {
j = i;
}
}
start = j; //상자가 있는 위치에 인덱스 값을 start 지점으로 놓아줌.
}else if(start2 == 2) {
System.out.println("프로그램 종료");
break;
}else {
System.out.println("다시 입력");
}
}
}
}
public class Start {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
GameStart gs = new GameStart();
System.out.println("-----원래 위치-----");
for(int i=0;i<gs.mk.length;i++) {
gs.mk[i].print();
}
gs.give();
}
}
원숭이 클래스 하나를 만들어서 원숭이 클래스를 배열로 5마리를 만들었고 각각 색깔과 물건을 지정해주었다.
물건을 돌리는 클래스를 또 만들어서 메인문에서 원할때까지 돌리게끔 하였다.
종료하고 싶을때는 2번(종료)를 입력해서 프로그램을 종료(break)하게끔 하였다.
감사합니다.