Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法始终返回零_Java_Return_Return Value - Fatal编程技术网

Java 方法始终返回零

Java 方法始终返回零,java,return,return-value,Java,Return,Return Value,我对java非常陌生,我正在尝试创建一个程序,测试用户两个随机频率之间的差异。除了当我试图得到2个频率的差时,答案总是0,其他一切都是有效的。如何让它显示实际的差异?下面是我编写的创建音调并计算差异的类: public class Quiz{ private PitchPlay one = new PitchPlay(); private PitchPlay two = new PitchPlay(); private int frequencyOne; pr

我对java非常陌生,我正在尝试创建一个程序,测试用户两个随机频率之间的差异。除了当我试图得到2个频率的差时,答案总是0,其他一切都是有效的。如何让它显示实际的差异?下面是我编写的创建音调并计算差异的类:

public class Quiz{

    private PitchPlay one = new PitchPlay();
    private PitchPlay two = new PitchPlay();

    private int frequencyOne;
    private int frequencyTwo;

    private int dif = new Integer(Math.abs(frequencyTwo - frequencyOne));

public int run(){
    frequencyOne = new Integer((int)(Math.random() * 5000 + 50));
    frequencyTwo = new Integer((int)(Math.random() * 5000 + 50));
    return this.dif;
}

public int freqDif(){
    return this.dif;
}

public void playQuiz(){
    one.play(one.note(frequencyOne, 2, 15));//note(frequency, duration, volume)
    two.play(two.note(frequencyTwo, 2, 15));
}
}
下面是使用测验课的课堂:

public class Action implements ActionListener{
Quiz one = new Quiz();

public void actionPerformed (ActionEvent e){
        if(e.getSource() == playSoundButton)
        {
            if(answerResponse.getText().compareTo("Correct!")  == 0 || answerResponse.getText().compareTo("Play and Listen...") == 0)
            {
                one.run();
                one.playQuiz();
            }
            else
            {
                one.playQuiz();
            }
        }
        if(e.getSource() == submitButton)
        {   
            String responseText = new String(responseField.getText());
            if(responseText !=null && !"".equals(responseText)){
                try{
                    Integer responseNumber = Integer.parseInt(responseText);

            if(responseNumber == one.freqDif())
            {
                    answerResponse.setText("Correct!");
                    answerResponse.setVisible(true);
            }
            else
            {
                answerResponse.setText("Wrong Answer. The difference is " + one.freqDif() + " hertz.");
                answerResponse.setVisible(true);
            }
                }catch(NumberFormatException f){
                    f.printStackTrace(System.out);
                }
            }



        }

    }
}

这是在创建变量时计算的,而不是在使用变量时计算的。您需要在分配变量后进行计算。

您的代码有几个问题:

  • 正如其他人所提到的,这条线

    private int dif = new Integer(Math.abs(frequencyTwo - frequencyOne));
    
    创建一个变量并指定一个由其他两个变量计算得出的值。使用创建时其他变量的值。每次这两个变量的值更改时,都需要重新计算。这不会自动发生在您身上

  • newinteger(…)
    创建一个
    Integer
    对象。随后将此对象指定给
    int
    变量时,将从对象中取出该值。这会在代码中添加一些不必要的内存和运行时。相反,您应该直接为变量赋值。比如说,

    frequencyOne = (int)(Math.random() * 5000 + 50);
    
  • frequencyOne = (int)(Math.random() * 5000 + 50);