簡體   English   中英

Java:達到一定值后重新啟動程序

[英]Java: Restarting program after achieving certain value

我正在制作一款允許用戶猜測隨機數的游戲。 如果用戶猜對了並且他/她決定再次玩,則必須生成一個新號碼。 我假設如果在開始時都將布爾值“ restart”設置為“ true”(此后不久將其設置為false),然后在“ restart”再次變為true之后將其設置為true,則程序將重新開始。 ..它沒。 看到我在做什么錯嗎? 謝謝。

  import java.util.*;
  import javax.swing.*;
  import java.util.Scanner;

  public class RandomGuess2
  {
  public static void main(String[] args)
  {
  Scanner input = new Scanner(System.in);

  String userNum;
  int userInput, numInt, genNum, amount = 0;
  int repeatPlay = 0;
  int x = 1;
  boolean numTruth, restart;
  boolean repeatIsYes = false;

  restart = true;
  userInput = JOptionPane.showConfirmDialog(null, "Would you like to try and guess the magic    
  number?", "Guessing Game", JOptionPane.YES_NO_OPTION);

  genNum = (1 + (int)(Math.random() * 1000));


  do
    if((numTruth = (userInput == JOptionPane.YES_OPTION)) || (repeatIsYes = (userInput == 
    JOptionPane.YES_OPTION)))
    restart = false;
    {
    userNum = JOptionPane.showInputDialog(null,"Enter the number you're thinking between 1 & 
    1000: ");
    numInt = Integer.parseInt(userNum);

    if((numInt > 1000) || (numInt < 1)) {
     JOptionPane.showMessageDialog(null, "Incorrect entry");
     repeatIsYes = true;
     }
     else if(numInt > genNum) {
     repeatIsYes = true;
     repeatPlay = JOptionPane.showConfirmDialog(null, "You guessed too high!" 
      + "\nWould you like to guess again?" + genNum);
     }
     else if(numInt < genNum) {
     repeatIsYes = true;
     repeatPlay = JOptionPane.showConfirmDialog(null, "You guessed too low!" 
      + "\nWould you like to guess again?" + genNum);
     }
     else if(numInt == genNum) {
     repeatIsYes = false;
     repeatPlay = JOptionPane.showConfirmDialog(null, "How did you do that? You guessed  
      + correctly!\nWould you like to guess again?" + genNum);
     if(restart = (repeatPlay == JOptionPane.YES_OPTION))
     {restart = true;}
     }

     if(repeatIsYes = (repeatPlay == JOptionPane.YES_OPTION)) {
     numTruth = true;
     repeatIsYes = true;
     }
     else {
     numTruth = false;
     repeatIsYes = false;
     JOptionPane.showMessageDialog(null, "Goodbye! \nYou played " + amount + " times.");
     break;
     }
    }
    else {
    numTruth = false;
    repeatIsYes = false;
    JOptionPane.showMessageDialog(null, "Goodbye!");
    break;
    }
  while(numTruth = true);      
  }}

從未真正使用過restart ,即只設置了它。 要使應用程序重新啟動,請在循環中的適當位置檢查“ restart的值。

我沒有時間徹底閱讀您的代碼(順便說一句,由於格式和結構的原因,這很難閱讀),但是一個簡單的解決方案是使用兩個循環。

這是一些偽代碼:

while( playAnotherGame) {  //this could be your "restart" flag
  boolean gameIsRunning = true;

  while( gameIsRunning ) {
    //ask for user input
    //check guesses
    if( guessedCorrectly ) {
      gameIsRunning  = false; //game is finished

      //display result
      //ask for user input: restart or quit
      if( quit ) {
        playAnotherGame = false;
      }       
    }
    else {
      //ask for user input: guess again, new game or quit
      //handle user input 
    }
  }
}

順便說一句,像這樣的結構容易出錯並且很難閱讀:

//you set and check repeatIsYes at the same time
if(repeatIsYes = (repeatPlay == JOptionPane.YES_OPTION)) {
  numTruth = true;
  repeatIsYes = true; //this is already true, see the if-condition
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM