2013-07-09 6 views
0
for(int i =0; i<8;i++){ 
    for(int j =0; j<8;j++){ 
    Ratsuk.getNewtablero().getMesa(i,j).setBackground(matrizcolor[i][j]); 
    if (Ratsuk.getNewtablero().getMesa(i,j).getBackground()==Color.lightGray); 
    Ratsuk.getNewtablero().getMesa(i,j).setEnabled(false); 
    } 
} 

Ratsuk.getNewtablero().getMesa(i,j)은 newtablero 안에있는 JButton 2d 배열을 호출하기위한 것이며, matrizcolor는 동일한 크기의 2 차원 배열입니다.내부에 무엇이 잘못 되었나요?

이 배열을 실행하면이 배열의 모든 버튼이 lightgray 것뿐만 아니라 비활성화됩니다. 어떤 이유로 1을 설명 할 수 있습니까?

+7

들여 쓰기를 수정할 수 있으면 여기에서 무슨 일이 일어나는지 알 수 있습니다. – BlackVegetable

+5

이 질문은 오타 질문이기 때문에 화제가 아닌 것 같습니다 – RiaD

+0

예, 정말 어리석은 실수를 저질 렀습니다 -_- – MAG

답변

10

내부 if 문 다음에 세미콜론이 있습니다.

if (Ratsuk.getNewtablero().getMesa(i,j).getBackground()==Color.lightGray); 

이렇게하면 다음 줄이 매번 실행됩니다. 컴파일러는 (1) 단일 문 또는 (2) 단일 블록을 if 문과 연관시킵니다. 이 경우 컴파일러는 단일 문을 해당 if 문과 연관 시키지만 단일 문은 문자 그대로 아무것도 수행하지 않는 세미콜론입니다. 세미콜론 문장 "이 실행"되면, 프로그램은 다음의 행을 실행하여 정상적으로 계속된다

Ratsuk.getNewtablero().getMesa(i,j).setEnabled(false); 

를 상관없이 경우 문장의 참 또는 거짓의 값. 세미콜론을 제거하면 문제가 해결됩니다.

+6

그리고 'equals'를 사용하여 Colors를 비교합니다. – Maroun

+0

@MarounMaroun 최적화 단계에서 제거된다고 생각하지만 잘 모르겠습니다. –

+1

@GrijeshChauhan 컴파일러가 콜 체인에서 어떤 부작용도 없다는 것을 확실히 결정할 수 없다면 의심하지 않습니다. –

관련 문제