나는 하노이의 탑승 게임을하기 위해 데이터 구조에 ArrayList의 ArrayList를 사용하고 있습니다. 나는 확실히 사용자가 작은 디스크의 상단에 더 큰 디스크를 이동하려고하지 않는 체크를하고 확인하기 위해 부울 방법을 사용하려고배열 목록에서 실제 정수 값을 얻는 방법
private ArrayList<ArrayList> lists = new ArrayList<ArrayList>();
private ArrayList<Integer> peg1 = new ArrayList<Integer>();
private ArrayList<Integer> peg2 = new ArrayList<Integer>();
private ArrayList<Integer> peg3 = new ArrayList<Integer>();
//Constructor
public TowersOfHanoi() {
lists.add(null);
lists.add(peg1);
lists.add(peg2);
lists.add(peg3);
}
public ArrayList initializeGame(int n) {
for (int i = 0; i < n; i++) {
peg1.add(i+1);
}
return peg1;
}
}
그러나, 다음과 같이 게임 제작 및 초기화 , 나는 arrayList에 저장된 정수 값을 어떻게 가져올 지 이해하지 못합니다. 정수 값은 디스크의 직경을 측정하는 방법으로 사용됩니다. I.E. 1은 2보다 작습니다. 3보다 작습니다. 이것은 제가 작성한 코드입니다 ... 나는 그저 거기에 저장된 정수의 실제 값이 아니라 인덱스를 얻고 있다고 믿습니다. 실제 값을 얻으려면 어떻게해야합니까?
public boolean isMoveLegal(int moveFrom, int moveTo){
ArrayList<Integer> fromPeg = lists.get(moveFrom);
int x = (fromPeg.remove(0)).intValue();
ArrayList<Integer> toPeg = lists.get(moveTo);
int y = (toPeg.get(0)).compareTo(x);
if(x<y){
System.out.println("illegal move");
}
return false;
}
당신도 먼저 Javadoc을 살펴나요? –
isMoveLegal() 메소드는 항상 * false *를 반환한다는 것을 알고 계십니까? –
'remove'와'get' 두 값을 인덱스가 아닌리스트에서 반환합니다. 답은 "compareTo"가 그것을 엉망으로 만들기 때문에 목록에서 값으로'y'를 설정하지 않는다고 말합니다. 또한 : (1)'Integer'가 있다면'intValue()'를 쓰지 않고'int'에 할당 할 수 있습니다. (이것을 자동 언 박싱이라고합니다.) (2)'ArrayList'대신'ArrayList >'을 사용하십시오. 절대적으로 필요한 경우를 제외하고 유형 매개 변수 ('Integer')없이 제네릭 형식 (예 :'ArrayList')을 사용하면 안됩니다. –
ajb