1

每次我运行我的 PairTester 类时,每个结果都会得到零。谁能告诉我为什么?

public class Pair {
    private double val1;
    private double val2;

    public Pair(double aFirst, double aSecond) {
        aFirst = val1;
        aSecond = val2;
    }

    public double getSum() {
        double sum = val1 + val2;
        return sum;
    }

    public double getDifference() {
        double difference = val1 - val2;
        return difference;
    }

    public double getProduct() {
        double product = val1 * val2;
        return product;
    }

    public double getAverage() {
        double average = (val1 + val2) / 2;
        return average;
    }

    public double getAbsolute() {
        double absolute = Math.abs(val1 - val2);
        return absolute;
    }

    public double getMinimum() {
        double minimum = Math.min(val1, val2);
        return minimum;
    }

    public double getMaximum() {
        double maximum = Math.max(val1, val2);
        return maximum;
    }
}

这是我的测试类:

public class PairTester {
    public static void main(String[] args) {
        Pair myPair = new Pair(11, 15);
        System.out.println("Sum = " + myPair.getSum());
        System.out.println("Difference = " + myPair.getDifference());
        System.out.println("Average = " + myPair.getAverage());
        System.out.println("Absolute = " + myPair.getAbsolute());
        System.out.println("Minimum = " + myPair.getMinimum());
        System.out.println("Maximum = " + myPair.getMaximum());
    }
}
4

5 回答 5

3

您在构造函数中的分配是相反的,因此您的实例字段没有按需要初始化。:

改变这个

public Pair (double aFirst, double aSecond)
{
    aFirst = val1;
    aSecond = val2;
}

至:

public Pair (double aFirst, double aSecond)
{
    val1 = aFirst;
    val2 = aSecond;
}

由于没有为实例字段分配任何值,val1因此val2这些字段将被初始化为double默认值,即0.0d.

于 2013-10-07T01:32:49.747 回答
1

这是因为您已将实例字段分配给构造函数的参数

public class Pair
{
    private double val1;
    private double val2;

    public Pair (double aFirst, double aSecond)
    {
        aFirst = val1;
        aSecond = val2;
    }

val1并将val2被初始化为0自动

尝试使用

    public Pair (double aFirst, double aSecond)
    {
        val1 = aFirst;
        val2 = aSecond;
    }

反而....

于 2013-10-07T01:33:38.540 回答
0

从您的代码中,我们可以看到您已经使用实例字段初始化了 val1 和 val2 值。任何实例字段的默认值为零。这就是为什么您的 PairTester 类的结果总是为零的原因。

public Pair (double aFirst, double aSecond)
{
    aFirst = val1;
    aSecond = val2;
}

尝试改变(正确的方式)

public Pair (double aFirst, double aSecond)
{
    val1 = aFirst;
    val2 = aSecond;
}

建议使用

public Pair (double val1, double val2)
{
    this.val1 = val1;
    this.val2 = val2;
}

所以下次你不会感到困惑

于 2013-10-07T01:33:21.280 回答
0

您必须将构造函数更改为此

public Pair (double aFirst, double aSecond)
{
    val1 = aFirst;
    val2 = aSecond;
}
于 2013-10-07T01:33:36.053 回答
0

尝试

public Pair (double aFirst, double aSecond)
{
    val1 = aFirst;
    val2 = aSecond;
}
于 2013-10-07T01:35:15.883 回答