2009-09-08 2 views
0

를 반복하지 않으면 서 I) (내 스윙 인터페이스 1 단계를 호출자바 루프

private void solveButtonMouseClicked(java.awt.event.MouseEvent evt) {           


    step1(); 


} 

에서 다음 버튼을 가지고;

private void step1(){ 

//step 1 solving the white cross around the yellow middle 
     while((!(F2.getBackground().equals(white))) & (!(F4.getBackground().equals(white))) & (!(F6.getBackground().equals(white))) & (!(F8.getBackground().equals(white)))){ 


     textArea.append("cnt"); 

     //top three pieces solved 
     if(F2.getBackground().equals(white) && F4.getBackground().equals(white) && F6.getBackground().equals(white)){ 
      //solve F8 
      while(!(F8.getBackground().equals(white))){ 

       //check right side 
       if(R2.getBackground().equals(white)){right(); right(); downinv(); rightinv(); rightinv();} 
       else if(R4.getBackground().equals(white)){rightinv(); downinv(); right();} 
       else if(R6.getBackground().equals(white)){right(); downinv(); rightinv();} 
       else if(R8.getBackground().equals(white)){downinv();} 
       //check left side 
       else if(L2.getBackground().equals(white)){left(); left(); down(); leftinv(); leftinv();} 
       else if(L4.getBackground().equals(white)){leftinv(); down(); left();} 
       else if(L6.getBackground().equals(white)){left(); down(); leftinv();} 
       else if(L8.getBackground().equals(white)){down();} 
       //check back side 
       else if(B2.getBackground().equals(white)){back(); back(); down(); down();} 
       else if(B4.getBackground().equals(white)){backinv(); down(); down();} 
       else if(B6.getBackground().equals(white)){back(); down(); down();} 
       else if(B8.getBackground().equals(white)){down(); down();} 
       //check up side 
       else if(U2.getBackground().equals(white)){frontinv(); up(); rightinv(); upinv();} 
       else if(U4.getBackground().equals(white)){frontinv(); up(); up(); rightinv(); upinv(); upinv();} 
       else if(U6.getBackground().equals(white)){frontinv(); rightinv();} 
       else if(U8.getBackground().equals(white)){front();} 
       //check down side 
       else if(D2.getBackground().equals(white)){down(); frontinv(); right();} 
       else if(D4.getBackground().equals(white)){front(); right();} 
       else if(D6.getBackground().equals(white)){frontinv(); leftinv();} 
       else if(D8.getBackground().equals(white)){downinv(); frontinv(); right();} 
      }//end while 
     }//end if 

     //top two pieces solved 
     if(F2.getBackground().equals(white) && F4.getBackground().equals(white)){ 
      //solve F6 
      while(!(F6.getBackground().equals(white))){ 
       //chech front side 
       if(F8.getBackground().equals(white)){front();} 
       //check right side 
       else if(R2.getBackground().equals(white)){frontinv(); up(); front();} 
       else if(R4.getBackground().equals(white)){right(); frontinv(); up(); front();} 
       else if(R6.getBackground().equals(white)){rightinv(); frontinv(); up(); front();} 
       else if(R8.getBackground().equals(white)){right(); right(); frontinv(); up(); front();} 
       //check left side 
       else if(L2.getBackground().equals(white)){frontinv(); upinv(); front();} 
       else if(L4.getBackground().equals(white)){frontinv(); left(); upinv(); leftinv(); front();} 
       else if(L6.getBackground().equals(white)){frontinv(); leftinv(); upinv(); left(); front();} 
       else if(L8.getBackground().equals(white)){frontinv(); left(); left(); upinv(); left(); left(); front();} 
       //check back side 
       else if(B2.getBackground().equals(white)){frontinv(); up(); up(); front();} 
       else if(B4.getBackground().equals(white)){frontinv(); backinv(); up(); up(); front();} 
       else if(B6.getBackground().equals(white)){frontinv(); back(); up(); up(); front();} 
       else if(B8.getBackground().equals(white)){frontinv(); back(); back(); up(); up(); front();} 
       //check up side 
       else if(U2.getBackground().equals(white)){up();rightinv();upinv();} 
       else if(U4.getBackground().equals(white)){up(); up();rightinv(); upinv(); upinv();} 
       else if(U6.getBackground().equals(white)){rightinv();} 
       else if(U8.getBackground().equals(white)){upinv(); rightinv(); up();} 
       //check down side 
       else if(D2.getBackground().equals(white)){down(); right();} 
       else if(D4.getBackground().equals(white)){down(); down(); right();} 
       else if(D6.getBackground().equals(white)){right();} 
       else if(D8.getBackground().equals(white)){downinv(); right();} 
      }//end while 
      textArea.append("\nstep 1a (75% complete)\n"); 
     }//end if 

     //top piece solved 
     if((F2.getBackground().equals(white)) && (!(F4.getBackground().equals(white)))){ 
      //solve F4 
      while(!(F4.getBackground().equals(white))){ 
       //check front side 
       if(F6.getBackground().equals(white)){frontinv();} 
       //check right side 
       else if(R2.getBackground().equals(white)){front(); up(); frontinv();} 
       else if(R4.getBackground().equals(white)){right(); front(); up(); frontinv();} 
       else if(R6.getBackground().equals(white)){rightinv(); front(); up(); frontinv();} 
       else if(R8.getBackground().equals(white)){right(); right(); front(); up(); frontinv();} 
       //check left side 
       else if(L2.getBackground().equals(white)){front(); upinv(); frontinv();} 
       else if(L4.getBackground().equals(white)){front(); left(); upinv(); frontinv();} 
       else if(L6.getBackground().equals(white)){front(); leftinv(); upinv(); frontinv();} 
       else if(L8.getBackground().equals(white)){front(); left(); left(); upinv(); frontinv();} 
       //check back side 
       else if(B2.getBackground().equals(white)){front(); up(); up(); frontinv();} 
       else if(B4.getBackground().equals(white)){front(); backinv(); up(); up(); frontinv();} 
       else if(B6.getBackground().equals(white)){front(); back(); up(); up(); frontinv();} 
       else if(B8.getBackground().equals(white)){front(); back(); back(); up(); up(); frontinv();} 
       //check up side 
       else if(U2.getBackground().equals(white)){front(); front(); up(); rightinv(); frontinv(); frontinv();} 
       else if(U4.getBackground().equals(white)){left();} 
       else if(U6.getBackground().equals(white)){front(); front(); rightinv(); frontinv(); frontinv();} 
       else if(U8.getBackground().equals(white)){front(); front(); upinv(); rightinv(); frontinv(); frontinv();} 
       //check down side 
       else if(D2.getBackground().equals(white)){downinv(); leftinv();} 
       else if(D4.getBackground().equals(white)){leftinv();} 
       else if(D6.getBackground().equals(white)){downinv(); downinv(); leftinv();} 
       else if(D8.getBackground().equals(white)){down(); leftinv();} 
      }//end while 
      textArea.append("\nstep 1a (50% complete)\n"); 
     }//end if 

     if(!(F2.getBackground().equals(white))){ 
      //solve top piece 

      while(!(F2.getBackground().equals(white))){ 
       if(F4.getBackground().equals(white)){front();} 
       else if(F6.getBackground().equals(white)){frontinv();} 
       else if(F8.getBackground().equals(white)){front(); front();} 
       //check right side 
       else if(R2.getBackground().equals(white)){up();} 
       else if(R4.getBackground().equals(white)){right(); up();} 
       else if(R6.getBackground().equals(white)){rightinv(); up();} 
       else if(R8.getBackground().equals(white)){right(); right(); up();} 
       //check left side 
       else if(L2.getBackground().equals(white)){upinv();} 
       else if(L4.getBackground().equals(white)){left(); up();} 
       else if(L6.getBackground().equals(white)){leftinv(); up();} 
       else if(L8.getBackground().equals(white)){left(); left(); upinv();} 
       //check back side 
       else if(B2.getBackground().equals(white)){up(); up();} 
       else if(B4.getBackground().equals(white)){backinv(); up(); up();} 
       else if(B6.getBackground().equals(white)){back(); up(); up();} 
       else if(B8.getBackground().equals(white)){back(); back(); up(); up();} 
       //check up side 
       else if(U2.getBackground().equals(white)){up(); rightinv(); frontinv();} 
       else if(U4.getBackground().equals(white)){up(); up(); rightinv(); frontinv();} 
       else if(U6.getBackground().equals(white)){rightinv();frontinv();} 
       else if(U8.getBackground().equals(white)){upinv(); rightinv(); frontinv();} 
       //check down side 
       else if(D2.getBackground().equals(white)){down(); right(); frontinv();} 
       else if(D4.getBackground().equals(white)){down(); down(); right(); frontinv();} 
       else if(D6.getBackground().equals(white)){right(); frontinv();} 
       else if(D8.getBackground().equals(white)){downinv(); right(); frontinv();} 


      }//end while 
      textArea.append("\nStep 1a (25% complete)\n"); 
     }//end else 
    }//end while 
}//end step 1 

문제는 step1()의 가장 바깥 쪽 while 루프 인 것처럼 보입니다. 모든 조건이 충족 될 때까지 실행을 계속하기로되어 있지만 반복이 끝나면 중지되고 이유를 파악할 수 없습니다. 바깥 쪽 while 루프를 제거하면 step1()이 계속 진행되므로 버튼을 여러 번 누를 때마다 단계가 진행됩니다. 도움!

+4

. 코드가 작동하지 않는 것은 당연한 일입니다. – ChaosPandion

+0

ChaosPandion 나는 headfirst 디자인 패턴을 가지고있어, gona가 곧 읽는 것을 시작하지만, 내 질문에 대답하지 않는다. – kokokok

답변

5

모든 비교가 true가 될 때까지 루핑을 계속하고 싶다고 말한 것입니다.

현재 코딩 된 방식은 조건이 충족되면 루프에서 빠져 나옵니다. 보다는

while (!boolean1 && !boolean2 && !boolean3) { 

는 시도

당신은 심각하게 당신의 디자인을 재고 할 필요가
while (! (boolean1 && boolean2 && boolean3)) { 
+3

+1 모든 것을 읽을 수 있습니다. – seth

+0

DeMorgan의 법 FTW! :) http://en.wikipedia.org/wiki/De_Morgans_laws – mohaps

0

내 첫 번째 추측은 루프에서 논리 비교 '& &'이 아닌 비트 '&'을 사용하는 것처럼 보입니다.

+0

실제로 & amp;를 사용하고 있지만 while 루프가 작동하지 않는 동안 나는 & 줄이려고 시도했다. – kokokok

+3

@ kokokok 마지막 문장을 읽은 후 내 뇌가 바뀌었다. 제발, 절대로, 절대로하지 마십시오. 문제를 해결하기위한 몇 가지 단계가 있으며, 첫 번째 단계는 문제가 무엇인지 알아 내고 그 문제를 이해하는 것입니다. 당신이 이해하지 못하는 것을 임의적으로 변경함으로써, 당신은 상황을 악화시키는 것이 거의 확실합니다. 이 경우 아마도 버그를 도입했을 것입니다. – Imagist

+0

롤 yessir 지적 – kokokok

0

내 생각 엔 JVM이 텍스트의 벽에 도달하고 우리와 마찬가지로 무엇을 해야할지, 어떤 욕망도 없다는 것입니다.

즉, && 대신 &을 사용하고 있습니다.

솔직히 말해서 거대한 분기 기타 사다리를 반복 적용하면 매우 심각한 오류를 범했습니다. 비록 당신이 그것을 작동 시키더라도, 이런 종류의 코드는 프로세서에 지옥이됩니다. 내 추천 : 리팩터링.

1

위/아래/왼쪽/오른쪽/왼쪽/왼쪽 등의 방법 중 하나가 색상을 테스트하는 배경을 수정하여 while 조건이 거짓으로 평가되어 1 개 이상을 방지 할 수 있습니다. 되풀이.

+0

빌어 먹을 그것은 너무 분명 나는 지금 당장 얼굴에 펀치 같은 느낌. ty – kokokok

관련 문제