2016-10-24 11 views
0

В настоящее время я делаю игру с бумажными ножницами, в которой вы играете против компьютера. Мой цикл while для контроля, который достиг максимального значения, продолжает замерзать. Надеюсь, что нижеприведенный метод не слишком прост для чтения и содержит достаточную информацию. В основном, когда я играю в игру и пытаюсь сделать ход, программа просто зависает. Я пробовал программу без цикла while, и он отлично работает. Я сделал так, чтобы каждый шаг был числом. 0 для скалы, 1 для ножниц и 2 для бумаги. Метод computerPlayer.newChoice(); является случайным числом из другого класса.Замерзание в петле

public void newChoice() { 
    while (humanS < 3 && computerS < 3) { 
     computerPlayer.newChoice(); 

     if (playerChoice == 0) { 
      viewer.jLblHumanM.setText("Sten"); 
      if (computerPlayer.choice == 0) { 
       viewer.jLblComputerM.setText("Sten"); 

      } else if (computerPlayer.choice == 1) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Sax"); 
       viewer.jLblHumanS.setText("" + HScore); 
      } else if (computerPlayer.choice == 2) { 
       CScore += 1; 
       viewer.jLblComputerM.setText("Påse"); 
       viewer.jLblComputerS.setText("" + CScore); 
      } 
     } else if (playerChoice == 1) { 
      viewer.jLblHumanM.setText("Sax"); 
      if (computerPlayer.choice == 0) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Sten"); 
       viewer.jLblHumanS.setText("" + HScore); 

      } else if (computerPlayer.choice == 1) { 
       viewer.jLblComputerM.setText("Sax"); 

      } else if (computerPlayer.choice == 2) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Påse"); 
       viewer.jLblHumanS.setText("" + HScore); 
      } 
     } else if (playerChoice == 2) { 
      viewer.jLblHumanM.setText("Påse"); 
      if (computerPlayer.choice == 0) { 
       viewer.jLblComputerM.setText("Sten"); 
       HScore += 1; 
       viewer.jLblHumanS.setText("" + HScore); 
      } else if (computerPlayer.choice == 1) { 
       viewer.jLblComputerM.setText("Sax"); 
       CScore += 1; 
       viewer.jLblComputerS.setText("" + CScore); 
      } else if (computerPlayer.choice == 2) { 
       viewer.jLblComputerM.setText("Påse"); 
      } 
     } 
    } 
} 
+1

если '(Humans <3 && КОМПЬЮТЕРОВ <3)', то вы будете продолжать называть 'newChoice' навсегда (и, вероятно, получить StackOverflowError в какой-то момент) .. – assylias

+1

Я не думаю, что вы увеличиваете свои переменные 'humanS' или' computerS' ... – brso05

+0

Какой поток выполняет этот код? – talex

ответ

0

У вас слишком много переменных. humanS и HScore и compterS и CScore кажутся дублирующими, а также источником вашей проблемы.

while(humanS < 3 && computerS < 3){ 

Это должно быть

while(HScore < 3 && CScore < 3){ 
+0

Да, неряшливая ошибка. Но после изменения моего while-loop до - while (HScore <3 && CScore <3) { программа дает тот, кто первым выигрывает первый ход на 3 очка. – Bengan

+0

@Bengan Обучение использованию отладчика поможет вам решить обе эти проблемы и будет лучше использовать оба наших времени – ControlAltDel

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

  • Нет связанных вопросов^_^