如何让我的applet将用户的输入转换为整数并将其与计算机的随机数进行比较?

时间:2013-11-05 15:38:54

标签: java swing actionlistener jtextfield parseint

我正在开始编程,但我还没有完全理解applet。但是,(在互联网教程的帮助下)我能够创建一个与用户一起玩游戏的小程序。 applet编译得很好,但是当它运行时,会出现以下错误消息:

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

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

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

2 个答案:

答案 0 :(得分:1)

请不要使用null布局。

从错误消息中可以看出,您按下按钮输入数字而不在输入中实际写入任何内容。你需要处理这个条件 您需要替换:

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

答案 1 :(得分:0)

java.lang.NumberFormatException: For input string: ""

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

您需要确保在用户输入信息后调用它,并且您可能希望验证输入或处理用户执行奇怪操作的情况下的此异常。