2016-12-22 3 views
0

Так что я недавно научил себя немного JOptionPane. Я пытаюсь сделать Guessing Game, которая использует JOptionPane. В настоящее время это мой код:Java Guessing Game (особенно JOptionPane)

import javax.swing.JOptionPane; 
import java.util.Scanner; 
import java.util.Random; 

public class GuessingGameJOptionPane { 

public static void main(String[] args) { 

    int guess, numberToGuess, numberOfTries = 0; 
    String input; 
    boolean win; 

    Scanner scan = new Scanner(System.in); 

    Random rand = new Random(); 

    numberToGuess = rand.nextInt(100); 

    JOptionPane.showInputDialog(null, null,"Please enter your name.", JOptionPane.QUESTION_MESSAGE); 

    win = false; 



    int guess1 = Integer.parseInt(JOptionPane.showInputDialog(null,null,"Guess a number between 1 and 1000", JOptionPane.QUESTION_MESSAGE)); 

    while(win == false){ 


     numberOfTries++; 

     if(numberToGuess < guess1) 
     { 
      JOptionPane.showMessageDialog(null,"The number you guessed was to low. Please try again" ,null , JOptionPane.INFORMATION_MESSAGE); 

     } 
     else if(numberToGuess > guess1){ 
      JOptionPane.showMessageDialog(null,"The number you guessed was to high. Please try again" ,null , JOptionPane.INFORMATION_MESSAGE); 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Congratulations you won. The number was " + numberToGuess + ". It took you " + numberOfTries, null, JOptionPane.INFORMATION_MESSAGE); 
      win = true; 
     } 


    }//Win == False 






}//Main Method 

} // Класс

После того как я ввести номер он постоянно говорит, что ваш номер является низким или высоким и продолжает создавать новую панель. Любая помощь будет оценена Спасибо.

+1

'в то время как (победу == лжи)' никогда не выйдет, если вы входите в неправильном номере. Вы можете переместить 'int guess1 = ...' внутри цикла while, таким образом, он может отобразить вопрос, затем отобразить информационное сообщение и повторить, пока вы не исправите его. –

ответ

0

Ваша проблема конкретно живет здесь:

int guess1 = Integer.parseInt(JOptionPane.showInputDialog(null,null,"Guess a number between 1 and 1000", JOptionPane.QUESTION_MESSAGE)); 
while(win == false){ //Potential infinite loop begins here... 
    numberOfTries++; 
    if(numberToGuess < guess1) 
    { 
     JOptionPane.showMessageDialog(null,"The number you guessed was to low. Please try again" ,null , JOptionPane.INFORMATION_MESSAGE); 
    } 
    else if(numberToGuess > guess1){ 
     JOptionPane.showMessageDialog(null,"The number you guessed was to high. Please try again" ,null , JOptionPane.INFORMATION_MESSAGE); 
    } 
    else{ 
     JOptionPane.showMessageDialog(null, "Congratulations you won. The number was " + numberToGuess + ". It took you " + numberOfTries, null, JOptionPane.INFORMATION_MESSAGE); 
     win = true; 
    } 


}//Win == False 

Этот цикл будет только когда-либо выйти, если победа = истина. Однако это может произойти только в том случае, если правильное число угадывается. Некорректная запись номера приведет к бесконечному продолжению цикла, так как единственный раз, когда пользователь может фактически ввести номер, предшествует для записи цикла. Вы можете это доказать, указав в диалоговом окне вашего сообщения количество попыток: вы увидите, что каждое последующее диалоговое окно будет увеличивать количество попыток на единицу.

К счастью, исправить это легко:

while(win == false){ 
    int guess1 = Integer.parseInt(JOptionPane.showInputDialog(null,null,"Guess a number between 1 and 1000", JOptionPane.QUESTION_MESSAGE)); //Moved this inside the loop 
// ...rest is unchanged