0

私は Java の宿題の推測ゲームを行っていますが、ネストされた if else に論理的な問題があります。私は 2 つのことを判断しようとしています: 数値が高いか低いか、およびユーザーが暑くなっているか寒くなっているかです。変数 intGuess と intOldGuess があります。私はより暑い/より寒いために2つを比較しようとしていますが、比較するときにintOldGuessが0になるか、intGuessと同じになります。もちろんどちらも正しくありません。これが私がこれまでに持っているものです:

問題を引き起こしていると思われるセクションは次のとおりです。

public void actionPerformed(ActionEvent e)
        {
            int intGuess = 0, intOldGuess;
            intOldGuess = intGuess;

            try
            {
                intGuess = Integer.parseInt(txaUserGuess.getText().trim());

                if (intGuess < intRandomNum)
                {
                    lblHighLow.setText("Too Low");

                    if (intGuess > intOldGuess)
                    {
                        lblHotCold.setText("Getting Colder");
                        System.out.println(intOldGuess);
                        System.out.println(intGuess);
                    } 

必要な場合は、コード全体を次に示します。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class GuessNumber extends JFrame
{
    private JTextField txaUserGuess;
    private JLabel lblStart, lblPrompt, lblHighLow, lblHotCold;
    private JButton btnGuess, btnQuit, btnAgain;

    private int intRandomNum;

    Container c = getContentPane();

    public static void main(String args[])
    {
        GuessNumber app = new GuessNumber();

    }

    public GuessNumber()
    {
        super("Guessing Game");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Creates components
        btnGuess = new JButton("Guess");
        btnQuit = new JButton("Quit");
        btnAgain = new JButton("Play Again?");
        lblStart = new JLabel("I have a number between 1 and 1000.");
        lblPrompt = new JLabel(
                "Can you guess my number? Please enter your guess:");

        lblHighLow = new JLabel("");
        lblHotCold = new JLabel("");
        txaUserGuess = new JTextField(5);

        setLayout(new FlowLayout());

        c.add(lblStart);
        c.add(lblPrompt);
        c.add(txaUserGuess);
        c.add(btnGuess);
        c.add(btnQuit);
        c.add(btnAgain);
        c.add(lblHighLow);
        c.add(lblHotCold);

        setSize(350, 200);
        setVisible(true);
        btnAgain.setVisible(false);

        RandomNumber();

        FirstGuessButtonHandler ghandler = new FirstGuessButtonHandler();
        btnGuess.addActionListener(ghandler);

        QuitButtonHandler qhandler = new QuitButtonHandler();
        btnQuit.addActionListener(qhandler);

        AgainButtonHandler ahandler = new AgainButtonHandler();
        btnAgain.addActionListener(ahandler);

    }

    private void RandomNumber()
    {
        intRandomNum = new Random().nextInt(1000) + 1;
        System.out.println(intRandomNum);
    }

    class QuitButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    }

    class AgainButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {

        }
    }

    class FirstGuessButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            int intGuess = 0, intOldGuess;
            intOldGuess = intGuess;

            try
            {
                intGuess = Integer.parseInt(txaUserGuess.getText().trim());

                if (intGuess < intRandomNum)
                {
                    lblHighLow.setText("Too Low");

                    if (intGuess > intOldGuess)
                    {
                        lblHotCold.setText("Getting Colder");
                        System.out.println(intOldGuess);
                        System.out.println(intGuess);
                    } else if (intGuess < intOldGuess)
                    {
                        lblHotCold.setText("Getting Hotter");
                    }

                } else if (intGuess > intRandomNum)
                {
                    lblHighLow.setText("Too High");
                } else
                {
                    c.setBackground(Color.GREEN);
                    lblHighLow.setText("\n\tCorrect!");
                    txaUserGuess.setEditable(false);
                    btnAgain.setVisible(true);
                    btnGuess.setEnabled(false);
                }

            } catch (NumberFormatException e1)
            {
                lblHighLow.setText("\n\tEnter a VALID number!");
            }
        }

    }

}
4

6 に答える 6

2

intOldGuessメソッドのローカル変数です。したがって、メソッドが呼び出されるたびに、0(デフォルト値) に初期化されます。

値を保持するには、変数をクラス フィールドとして作成することをお勧めします。

class FirstGuessButtonHandler implements ActionListener
 {
        int intOldGuess;

        public void actionPerformed(ActionEvent e)
        {
            int intGuess = 0;

ただし、上記の場合、クラス フィールドはクラスのインスタンスごとに保持されるため、クラスの同じインスタンスを保持する必要があることに注意してください。FirstGuessButtonHandler

他のアプローチは、静的クラスフィールドintOldGuessとしても作成することです

于 2013-10-08T06:09:14.530 に答える
1

再初期化せずにローカル変数を使用する場合は、ローカル変数の使用を避ける必要があります。変数の値を保持するには、それらの変数を作成しますReference variable

あなたはこれを行うことができます-

class ClassName{
     int oldguess;
     public void yourMethod(){
           int newGuess = 0;
于 2013-10-08T06:21:49.050 に答える