【问题标题】:Math round and parsing issue数学回合和解析问题
【发布时间】:2014-05-23 05:49:18
【问题描述】:

我的代码运行良好,没有错误,但程序假设你是否等于、小于或大于计算机生成的数字(双),当我输入 1 或 1.0 时,计算机生成一个 2 甚至有时是一个 4,它在说我是平等的,我不知所措,甚至不知道从哪里开始找出问题所在。我得到的唯一线索是四舍五入可能会影响它,因为正如您在代码中看到的那样,它正在四舍五入。

    String overOrUnder = "Over or Under?";
    String CompNumberString = "";
    double compNumber;
    String userNumberString = "";
    double userNumber;
               public void actionPerformed(ActionEvent e)
               {
                  generateCompNumber();
                  labelCompNumber.setText(String.valueOf(compNumber));
                  labelCompNumber.revalidate();
                  getUserInputToInteger();
                  labelUserNumber.revalidate();
                  labelUserNumber.setText(userNumberString);
                  overOrUnderOrEqual();
               }
           });
    }





        public void generateCompNumber()
        {
               compNumber = Math.random() * 5;
               compNumber = Math.round(compNumber * 1);
               compNumber = compNumber/1;
        }
        public void getUserInputToInteger()
        {
            userNumberString = jTextYourNumber.getText();
            userNumber = Double.parseDouble(userNumberString);
        }
        public void overOrUnderOrEqual()
        {
            labelOverOrUnder.setText(overOrUnder);
            if (compNumber == userNumber)
            {
                equal = true;
                overOrUnder = "RIGHT ON!";
            }
            else if (compNumber > userNumber)//comp greater user
            {
                equal = false;
                overOrUnder = "You was Under!";
            }
            else if (compNumber < userNumber)//comp less user
            {
                equal = false;
                overOrUnder = "You was Over!";
            }
        }

【问题讨论】:

  • 你试过使用调试器吗?
  • 不,我不是很擅长使用,老实说从来没有
  • Brandon,如果你以后打算做任何编程,你应该今天学会使用调试器。这不是太难,它会节省你几个小时。如果您成为一名专业程序员,它将真正为您节省几个月的生命。不会使用调试器的程序员有点像不会使用锤子的木匠。
  • 问题可能出在你有labelOverOrUnder.setText(overOrUnder); 之前你决定用户的号码是否大于/小于/等于?这似乎是一个非常错误的地方......
  • Brandon - 您可能想考虑使用 Eclipse。它是免费的,并且比 TextPad 有一些优势。

标签: java parsing math double rounding


【解决方案1】:

您比较代码的部分工作正常。只有错误是,您在评估字符串之前设置文本。 labelOverOrUnder.setText(overOrUnder); 应该在 if-else 语句之后。这就是为什么您收到不正确的消息。这是修改后的代码。

class GMNR extends JFrame
{
    String overOrUnder = "Over or Under?";
    String CompNumberString = "";
    double compNumber;
    String userNumberString = "";
    double userNumber;
    Boolean equal;
    JPanel panelMain = new JPanel();
    JTextField jTextYourNumber = new JTextField(25);
    JButton buttonGenerate = new JButton("Generate");
    JLabel labelCompNumber = new JLabel();
    JLabel labelUserNumber = new JLabel();
    JLabel labelOverOrUnder = new JLabel();

    public GMNR()
    {
        //variables



        //end of variables
        setTitle("Guess My Number!");
        setVisible(true);
        setSize(1200, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        panelMain.add(jTextYourNumber);
        jTextYourNumber.setBackground(Color.green);
        panelMain.setBackground(Color.yellow);
        panelMain.add(jTextYourNumber);
        panelMain.add(labelCompNumber);
        panelMain.add(labelUserNumber);
        panelMain.add(buttonGenerate);
        panelMain.add(labelOverOrUnder);
        add(panelMain);
        labelOverOrUnder.revalidate();
        buttonGenerate.addActionListener(new ActionListener()
           {
               public void actionPerformed(ActionEvent e)
               {
                  generateCompNumber();
                  labelCompNumber.setText(String.valueOf(compNumber));
                  labelCompNumber.revalidate();
                  getUserInputToInteger();
                  overOrUnderOrEqual();
                  labelUserNumber.setText(userNumberString);
                  labelUserNumber.revalidate();
               }
           });
    }





        public void generateCompNumber()
        {
               compNumber = Math.random() * 5;
               compNumber = Math.round(compNumber * 1);
               compNumber = compNumber/1;
        }
        public void getUserInputToInteger()
        {
            userNumberString = jTextYourNumber.getText();
            userNumber = Double.parseDouble(userNumberString);
        }
        public void overOrUnderOrEqual()
        {


            if (compNumber == userNumber)
            {
                equal = true;
                overOrUnder = "RIGHT ON!";
            }
            else if (compNumber > userNumber)//comp greater user
            {
                equal = false;
                overOrUnder = "You was Under!";
            }
            else if (compNumber < userNumber)//comp less user
            {
                equal = false;
                overOrUnder = "You was Over!";
            }
            labelOverOrUnder.setText(overOrUnder);
            System.out.println("compNumber "+compNumber+", userNumber "+userNumber+", "+overOrUnder);
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2010-10-12
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多