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

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
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 に答える