0

我正在开始编程,但我还没有完全理解小程序。然而,(在互联网教程的帮助下)我能够创建一个与用户玩猜谜游戏的小程序。小程序编译正常,但运行时出现以下错误消息:

"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)"

我已经尝试将第userguess = Integer.parseInt( t1.getText() );101 行的“”移动到多个地方,但我仍然遇到同样的错误。谁能告诉我我做错了什么?编码:

// 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
4

2 回答 2

1

请不要使用null布局。

从错误消息中可以看出,您正在按下按钮输入数字,而实际上并未在输入中写入任何内容。你需要处理这种情况。
您需要更换:

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

和:

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");
    }
}
于 2013-11-05T15:45:12.057 回答
0
java.lang.NumberFormatException: For input string: ""

这意味着它被空字符串“”调用。这不是数字格式,因此会引发异常。

您需要确保在用户输入信息后调用它,并且您可能希望验证输入或处理此异常以应对用户做出奇怪事情的情况。

于 2013-11-05T15:45:02.573 回答