简体   繁体   中英

How do I make my applet turn the user's input into an integer and compare it to the computer's random number?

I'm in beginning programming and I don't fully understand applets yet. However, (with some help from internet tutorials) I was able to create an applet that plays a game of guess with the user. The applet compiles fine, but when it runs, this error message appears:

"Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:470)
    at java.lang.Integer.parseInt(Integer.java:499)
    at Guess.createUserInterface(Guess.java:101)
    at Guess.<init>(Guess.java:31)
    at Guess.main(Guess.java:129)"

I've tried moving the " userguess = Integer.parseInt( t1.getText() ); " on line 101 to multiple places, but I still get the same error. Can anyone tell me what I'm doing wrong? The Code:

// Creates the game GUI.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

    public class Guess extends JFrame{

        private JLabel userinputJLabel;
        private JLabel lowerboundsJLabel;
        private JLabel upperboundsJLabel;
        private JLabel computertalkJLabel;
        private JButton guessJButton;
        private JPanel guessJPanel;
        static int computernum;
        int userguess;
        static void declare() {
        computernum = (int) (100 * Math.random()) + 1;       //random number picked (1-100)
    }
// no-argument constructor
        public Guess()
   {
    createUserInterface();

   }
 // create and position GUI components
   private void createUserInterface()
   {

 // get content pane and set its layout
        Container contentPane = getContentPane();
        contentPane.setLayout( null );
        contentPane.setBackground( Color.white );

// set up userinputJLabel
        userinputJLabel = new JLabel();
        userinputJLabel.setText( "Enter Guess Here -->" );
        userinputJLabel.setBounds( 0, 65, 120, 50 );
        userinputJLabel.setHorizontalAlignment( JLabel.CENTER );
        userinputJLabel.setBackground( Color.white );
        userinputJLabel.setOpaque( true );
        contentPane.add( userinputJLabel );
// set up lowerboundsJLabel
        lowerboundsJLabel = new JLabel();
        lowerboundsJLabel.setText( "Lower Bounds Of Guess = 1" );
        lowerboundsJLabel.setBounds( 0, 0, 170, 50 );
        lowerboundsJLabel.setHorizontalAlignment( JLabel.CENTER );
        lowerboundsJLabel.setBackground( Color.white );
        lowerboundsJLabel.setOpaque( true );
        contentPane.add( lowerboundsJLabel );
// set up upperboundsJLabel
        upperboundsJLabel = new JLabel();
        upperboundsJLabel.setText( "Upper Bounds Of Guess = 100" );
        upperboundsJLabel.setBounds( 250, 0, 170, 50 );
        upperboundsJLabel.setHorizontalAlignment( JLabel.CENTER );
        upperboundsJLabel.setBackground( Color.white );
        upperboundsJLabel.setOpaque( true );
        contentPane.add( upperboundsJLabel );
// set up computertalkJLabel
        computertalkJLabel = new JLabel();
        computertalkJLabel.setText( "Computer Says:" );
        computertalkJLabel.setBounds( 0, 130, 100, 50 );  //format (x, y, width, height)
        computertalkJLabel.setHorizontalAlignment( JLabel.CENTER );
        computertalkJLabel.setBackground( Color.white );
        computertalkJLabel.setOpaque( true );
        contentPane.add( computertalkJLabel );
//Set up guess jbutton
        guessJButton = new JButton();
        guessJButton.setText( "Enter" );
        guessJButton.setBounds( 250, 78, 100, 30 );
        contentPane.add( guessJButton );
        guessJButton.addActionListener(

         new ActionListener() // anonymous inner class
         {
            // event handler called when Guess button is pressed
            public void actionPerformed( ActionEvent event )
            {
               guessActionPerformed( event );
            }

         } // end anonymous inner class

      ); // end call to addActionListener
// set properties of application's window
        setTitle( "Guess Game" ); // set title bar text
        setSize( 500, 500 ); // set window size
        setVisible( true );  // display window
//create text field
        TextField t1 = new TextField();                // Blank text field for user input
        t1.setBounds( 135, 78, 100, 30 );
        contentPane.add( t1 );
        userguess = Integer.parseInt( t1.getText() );
//create section for computertalk
        Label computertalkLabel = new Label("");
        computertalkLabel.setBounds( 115, 130, 300, 50);
        contentPane.add( computertalkLabel );
 }

 // Display computer reactions to user guess
   private void guessActionPerformed( ActionEvent event )
   {


      if (userguess > computernum)          //if statements (computer's reactions to user guess)
          computertalkJLabel.setText( "Computer Says: Too High" );
      else if (userguess < computernum)
          computertalkJLabel.setText( "Computer Says: Too Low" );
      else if (userguess == computernum)
          computertalkJLabel.setText( "Computer Says:You Win!" );
      else
          computertalkJLabel.setText( "Computer Says: Error" );


   } // end method oneJButtonActionPerformed
 // end method createUserInterface

 // main method
   public static void main( String args[] )
   {
      Guess application = new Guess();
      application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);


   } // end method main

} // end class Phone

Please do not use null layout.

As it appears from the error message, you are pressing the button to enter the number without actually writing anything in the input. You need to handle that condition.
You need to replace :

userguess = Integer.parseInt( t1.getText() );

with:

String userEntered = t1.getText().trim();
if(userEntered.equals("")){
    System.out.println("You did not enter anything");
}else{
    try{
        userguess = Integer.parseInt( userEntered );
    }catch(NumberFormatException e){
        System.out.println("Invalid format");
    }
}
java.lang.NumberFormatException: For input string: ""

This means it is getting called on the empty string "". This is not a number format so it raises an exception.

You need to make sure to call it after the user has input information, and you probably want to either validate the input or handle this exception for the cases where a user does something weird.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM