2016-10-24 7 views
0

Ich mache gerade ein Papier-Schere-Schere-Spiel, wo Sie gegen den Computer spielen. Meine While-Schleife, um zu kontrollieren, wer die maximale Punktzahl erreicht hat, bleibt eingefroren. Ich hoffe, dass die folgende Methode nicht zu schwer zu lesen ist und genügend Informationen enthält. Grundsätzlich, wenn ich das Spiel spiele und versuche, einen Zug zu machen, friert das Programm einfach ein. Ich habe das Programm ohne While-Schleife ausprobiert und es funktioniert gut. Ich habe es so gemacht, dass jede Bewegung eine Nummer ist. 0 für Stein, 1 für Schere und 2 für Papier. Die Methode computerPlayer.newChoice(); ist eine zufällig generierte Zahl aus einer anderen Klasse.While-Loop-Einfrieren

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

sein sollte, wenn '(Humans <3 && -Computer <3)' dann halten Sie 'newChoice' immer (und wahrscheinlich eine Stackoverflowirgendwann bekommen) ruft .. – assylias

+1

Ich denke nicht, dass Sie Ihre "humanS" oder "computerS" Variablen erhöhen ... – brso05

+0

Welcher Thread führt diesen Code aus? – talex

Antwort

0

Sie haben zu viele Variablen. HumanS und HScore und CompterS und CScore scheinen doppelt vorhanden zu sein, ebenso wie die Quelle Ihres Problems.

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

Diese

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

Ja, schlampiger Fehler. Aber nach dem Ändern meiner While-Schleife nach - während (HScore <3 && CScore <3) { das Programm gibt derjenige, der den ersten Zug gewinnt 3 Punkte sofort. – Bengan

+0

@Bengan Die Verwendung eines Debuggers würde Ihnen helfen, beide Probleme zu lösen und beide Zeiten besser zu nutzen – ControlAltDel