2009-09-08 7 views
0

У меня есть следующие кнопки в моем свинг интерфейсеJava пока цикл не зацикливание

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


    step1(); 


} 

, который вызывает шаг1();

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 

Проблема, по-видимому, является самой внешней петлей while в шаге 1(). Предполагается, что он будет работать до тех пор, пока все условия не будут выполнены, но он просто остановится после одной итерации, и я не могу понять, почему. Если я удаляю внешний элемент while, шаг 1() выполняется точно так же, как он должен проходить каждый шаг при нескольких нажатиях кнопки. Помогите!

+4

Вам необходимо серьезно пересмотреть свой дизайн. Неудивительно, что код не работает. – ChaosPandion

+0

ChaosPandion Я знаю, что только что получил начальные шаблоны дизайна, gona начнет читать его в ближайшее время, но он не отвечает на мой вопрос – kokokok

ответ

5

Вы упомянули, что хотите продолжать цикл, пока все сравнения не будут истинными.

Способ, которым он закодирован, теперь выйдет из цикла, если какое-либо условие станет истинным.

Вместо

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

Попробуйте

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

+1 для чтения всего этого. – seth

+0

Закон ДеМоргана FTW! :) http://ru.wikipedia.org/wiki/De_Morgans_laws – mohaps

0

Прежде всего я предполагаю, что вы используете побитовое «&», а не логическое сравнение «& &» в вашей петле.

+0

Фактически я использовал &&, но пока цикл не работал, поэтому я подумал, что дам и попробую – kokokok

+3

@ kokokok Мой мозг вывернулся наизнанку после прочтения вашего последнего предложения. Пожалуйста, никогда, никогда, не делайте этого. Есть несколько этапов для решения проблемы, и первое всегда ВСЕГДА выясняет, в чем проблема, и понимает ее. Произвольно изменяя вещи, которые вы не понимаете, вы почти наверняка усложняете ситуацию. В этом случае вы, вероятно, ввели ошибку. – Imagist

+0

lol yessir point отметил – kokokok

0

Я предполагаю, что JVM достигает этой стены текста и, подобно нам, не имеет понятия, что с ней делать, и никакого желания.

Это, или вы используете & вместо &&.

Но, честно говоря, если вы зацикливаетесь и применяете гигантскую ветвь else-if, вы сделали что-то очень серьезно. Даже если вы его заработаете, такой код есть ад на процессоре, не говоря уже о том, что нужно поддерживать боль. Моя рекомендация: рефакторинг.

1

Возможно, один из ваших методов вверх/вниз/влево/вправо/влево/левый и т. Д. Изменяет фон (ы), который вы тестируете цвета, заставляя условие while оценивать значение false, тем самым предотвращая более 1 итерация.

+0

Черт, это было так очевидно, я чувствую, как пробиваю себе лицо прямо сейчас. ty – kokokok

Смежные вопросы