2017-05-27 39 views
1

我有一个任务是让计算机生成1到100之间的数字,并且用户试图猜测它。我有它编码我只是无法让我的重播工作。它给我一个关于索引超出范围的错误,我不知道为什么。我还需要该程序能够在游戏过程中随时退出并调用方法出口。我不知道该怎么做。这是我目前的代码。重播循环,允许脚本在任何时候退出

import java.util.Scanner; 
import java.util.Random; 
/* 
Program to let user guess random generated number between 1 and 100 
*/ 
public class Hilo 
{ 
Scanner scan = new Scanner(System.in); 
Random generator = new Random(); // Random generator to generate number 
int computernumber; 
int usernumber; 
int guesses = 0; 
char play; 
char playagain; 
boolean replay; 

public void computerguess() 
{ 
    computernumber = generator.nextInt(100)+1; 
} 
public void userguess() 
{ 
    if(play == 'y') 
    { 
    System.out.println("Please guess a number between 1 and 100"); 
    usernumber = scan.nextInt(); 
    highorlow(); 
} 
} 
public void highorlow() 
{ 
    if(usernumber == computernumber) 
    { 
    System.out.println("Good Job! Your guessed the correct number!"); // Checks if you guessed the correct number 
     guesses = guesses +1; // Adds 1 to guess count 
    } 
    else 
    { 
     if(usernumber > computernumber) // Checks if your number is higher than the computers 
     { 
      System.out.println("Your guessed to high please try again"); 
       guesses =guesses +1; // Adds 1 to guess count 
      userguess(); // Lets user guess again 
     } 
     else 
     { 
      if(usernumber < computernumber) // Checks if your number is less than the computers number 
      { 
       System.out.println("Your guess was to low please try again"); 
       guesses = guesses +1;// Adds 1 to guess count 
       userguess(); // Lets user guess again 
      } 
     } 
    } 
} 
public void instructions() // Gives instructions on how to play 
{ 
    System.out.println("To play simply guess a number between 1 and 100. \nThe computer will tell you if you are correct or inncorrect. \n Press y to continue \n Press e at any time to exit"); 
    play = scan.nextLine().charAt(0); 
} 
public void printscore() 
{ 
    System.out.println("Your took "+guesses+" guesses to get the correct number \n"); // Tells user how many guesses they took 
} 
public void replay() // lets user replay game 
{ 
    System.out.println("Would you like to play again? Y for yes N for no"); 
    playagain = scan.nextLine().charAt(0);; 
    if(playagain =='y') 
    { 
    replay = true; 
    play(); 
    } 
} 
public void exit() 
{ 
    System.out.println("Thanks for playing! The number was "+computernumber+""); 
} 
public void play() 
{ 
    instructions(); 
    computerguess(); 
    userguess(); 
    printscore(); 
    replay(); 
    if(replay == true) 
    { 
    instructions(); 
    computerguess(); 
    userguess(); 
    printscore(); 
    replay(); 
} 
    else 
    { 
     if(replay == false) 
     { 
     System.exit(3); 
     } 
    } 
    } 

public static void main(String[] args) 
{ 
    Hilo guess = new Hilo(); 
    guess.play(); 
} 
} 

回答

0

可能这会做。

import java.util.Scanner; 
import java.util.Random; 
/* 
Program to let user guess random generated number between 1 and 100 
*/ 
public class Hilo 
{ 
Scanner scan = new Scanner(System.in); 
Random generator = new Random(); // Random generator to generate number 
int computernumber; 
int usernumber; 
int guesses = 0; 
String play; 
boolean replay; 

public void computerguess() 
{ 
    computernumber = generator.nextInt(100)+1; 
} 
public void userguess() 
{ 
    if("y".equalsIgnoreCase(play)) 
    { 
    System.out.println("Please guess a number between 1 and 100"); 
    String input = scan.next(); 
    if("e".equalsIgnoreCase(input)) exit(); 
    else usernumber = Integer.parseInt(input); 
    highorlow(); 
    }else if("e".equalsIgnoreCase(play)) exit(); 
} 
public void highorlow() 
{ 
    if(usernumber == computernumber) 
    { 
    System.out.println("Good Job! Your guessed the correct number!"); // Checks if you guessed the correct number 
     guesses = guesses +1; // Adds 1 to guess count 
    } 
    else 
    { 
     if(usernumber > computernumber) // Checks if your number is higher than the computers 
     { 
      System.out.println("Your guessed to high please try again"); 
       guesses =guesses +1; // Adds 1 to guess count 
      userguess(); // Lets user guess again 
     } 
     else 
     { 
      if(usernumber < computernumber) // Checks if your number is less than the computers number 
      { 
       System.out.println("Your guess was to low please try again"); 
       guesses = guesses +1;// Adds 1 to guess count 
       userguess(); // Lets user guess again 
      } 
     } 
    } 
} 
public void instructions() // Gives instructions on how to play 
{ 
    System.out.println("To play simply guess a number between 1 and 100. \nThe computer will tell you if you are correct or inncorrect. \n Press y to continue \n Press e at any time to exit"); 
    play = scan.next(); 
} 
public void printscore() 
{ 
    System.out.println("Your took "+guesses+" guesses to get the correct number \n"); // Tells user how many guesses they took 
} 
public void replay() // lets user replay game 
{ 
    System.out.println("Would you like to play again? Y for yes N for no"); 
    String input = scan.next(); 
    if("y".equalsIgnoreCase(input)) 
    { 
    replay = true; 
    play(); 
    } 
} 
public void exit() 
{ 
    System.out.println("Thanks for playing! The number was "+computernumber+""); 
    System.exit(3); 
} 
public void play() 
{ 
    if(replay == false) 
    { 
     exit(); 
    } 

    instructions(); 
    computerguess(); 
    userguess(); 
    printscore(); 
    replay(); 
} 

public static void main(String[] args) 
{ 
    Hilo guess = new Hilo(); 
    guess.replay = true; 
    guess.play(); 
} 
} 
+0

Thanjs。看起来不错 – user2860253

0

就试试这个代码(我想这应该工作 - 更改已被标记有变化码:找“改变”为关键字):

import java.util.Scanner; 
import java.util.Random; 
/* 
Program to let user guess random generated number between 1 and 100 
*/ 
public class Hilo 
{ 
    Scanner scan = new Scanner(System.in); 
    Random generator = new Random(); // Random generator to generate number 
    int computernumber; 
    int usernumber; 
    int guesses = 0; 
    char play; 
    char playagain; 
    //boolean replay; 
    //Change Code : Change No. 4 : Start 
    boolean replay = true; 
    //Change Code : Change No. 4 : End [Refer change No 5. for WHY?] 

    public void computerguess() 
    { 
     computernumber = generator.nextInt(100)+1; 
    } 
    public void userguess() 
    { 
     if(play == 'y') 
     { 

      /* 
      Your Code 
      usernumber = scan.nextInt(); 
      highorlow(); 
      */ 

      //Change Code : Change No. 1 : Start 
      boolean correctNumber = false; 

      while (!correctNumber) { // loop is used to ask user for a correct input 

       // this statment moved from above into the loop 
       System.out.println("Please guess a number between 1 and 100"); 


       String inputFromUser = scan.next(); 
       try{ 
        usernumber = Integer.parseInt(inputFromUser); 
        correctNumber = true; 
       } catch (NumberFormatException e) { 
        if(inputFromUser.equals("e")) { // Then user want to exit the game 
         exit(); // call the exit method 
        } else { 
         System.out.println(" Please input a correct number Please !!! "); 
        } 
       } 
      } 
      //Change Code : Change No. 1 : End 
     } else { 
      exit(); 
     } 
    } 
    public void highorlow() 
    { 
     if(usernumber == computernumber) 
     { 
      System.out.println("Good Job! Your guessed the correct number!"); // Checks if you guessed the correct number 
      guesses = guesses +1; // Adds 1 to guess count 
     } 
     else 
     { 
      if(usernumber > computernumber) // Checks if your number is higher than the computers 
      { 
       System.out.println("Your guessed to high please try again"); 
       guesses =guesses +1; // Adds 1 to guess count 

       //Change Code : Change No. 7 : Because we added userguess in the loop 
       //userguess(); // Lets user guess again 

      } 
      else 
      { 
       if(usernumber < computernumber) // Checks if your number is less than the computers number 
       { 
        System.out.println("Your guess was to low please try again"); 
        guesses = guesses +1;// Adds 1 to guess count 

        //Change Code : Change No. 7 : Because we added userguess in the loop 
        //userguess(); // Lets user guess again 

       } 
      } 
     } 
    } 
    public void instructions() // Gives instructions on how to play 
    { 
     System.out.println("To play simply guess a number between 1 and 100. \nThe computer will tell you if you are correct or inncorrect. \n Press y to continue \n Press e at any time to exit"); 
     play = scan.next().charAt(0); 
    } 
    public void printscore() 
    { 
     System.out.println("Your took "+guesses+" guesses to get the correct number \n"); // Tells user how many guesses they took 
    } 
    public void replay() // lets user replay game 
    { 
     System.out.println("Would you like to play again? Y for yes N for no"); 
     playagain = scan.next().charAt(0); 
     if(playagain =='y') 
     { 
      replay = true; 
      guesses = 0; // If you play again guesses will become zero 
      play(); 
     } 
     //Change Code : Change No. 2 : Start 
     else { 
      replay = false; // Only In case of Y it will continue 
     } 
     //Change Code : Change No. 2 : End 
    } 
    public void exit() 
    { 
     System.out.println("Thanks for playing! The number was "+computernumber+""); 
     //Change Code : Change No. 3 : Start 
     System.exit(3); // Whenever exit will be called user will be moved out of the application 
     //Change Code : Change No. 3 : End 
    } 
    public void play() 
    { 
     //Change Code : Change No. 5 : Start 
     /*instructions(); 
     computerguess(); 
     userguess(); 
     printscore(); 
     replay();*/ 
     //Change Code : Change No. 5 : End [Here we do not require this code if we make replay by default true] 
     if(replay == true) 
     { 
      instructions(); 
      computerguess(); 
      //Change Code : Change No. 6 : Start - User must be given multiple guesses 
      while(true) { 
       userguess(); 
       highorlow(); 
       if(usernumber == computernumber) { 
        break; 
       } 
      } 
      //Change Code : Change No. 6 : End 
      printscore(); 
      replay(); 
     } 
     else 
     { 
      if(replay == false) 
      { 
       System.exit(3); 
      } 
     } 
    } 

    public static void main(String[] args) 
    { 
     Hilo guess = new Hilo(); 
     guess.play(); 
    } 
} 
+0

谢谢。我感谢你展示这些变化。 – user2860253