前一个变量的值变为当前变量的值

时间:2016-05-20 06:07:31

标签: java

我的代码出了问题。当我尝试通过调用isEqual()方法来比较具有不同值的两个变量时。但它给了我一个真实的结果。有人能发现问题吗? 我的FloatingPoint类

import io.*;

//Class FloatingPoint

public class FloatingPoint
{

    //Constant
    public static final double MINPRECISION = 0.00000001;

    //Variable
    private static double precision;

    //Default constructor
    public FloatingPoint()
    {
        precision = MINPRECISION;
    }

    //Unsure if need a alternatve
    //Alternative constructor
    public FloatingPoint(double value)
    {
        if( (value < 0.0) || (value > 1.0) )
        {
            throw new IllegalArgumentException("Invalid reliability!");
        }
        setPrecision(value);
    }

    //Copy Constructor
    public FloatingPoint(FloatingPoint num)
    {
        precision = num.getPrecision();
    }

    //getPrecision
    public double getPrecision()
    {
        return precision;
    }

    //isEqual
    public boolean isEqual(FloatingPoint num)
    {
        return (Math.abs(precision - num.getPrecision()) < MINPRECISION);
    }

    //setPrecision
    public static void setPrecision(double value)
    {
        precision = value;
    }
}

这是我的主要课程

import java.io.*;

public class TestFloatingPoint
{

    public static void main(String [] args)
    {

        FloatingPoint f1, f2;
        f1= new FloatingPoint(0.2);
        System.out.print(f1.toString());

        f2=new FloatingPoint(1.0);
        System.out.print(f2.toString());
        System.out.print(f1.toString());

        System.out.print(f1.isEqual(f2));
        System.exit(0);
    }
}

2 个答案:

答案 0 :(得分:1)

  

当我尝试通过调用isEqual()方法来比较具有不同值的两个变量时。

您没有具有不同值的变量,因为您只有一个值 - 一个静态变量:

private static double precision;

(将setPrecision的声明更改为不是静态的。)

声明为static表示它与类型相关联,而不是与您的类型的任何实例相关联。您的类未声明任何实例字段,因此没有任何状态(除了对象标识)。

简单的解决方法是将其设为实例字段:

private double precision;

但是你应该更多地了解static的含义,以便你可以决定何时使用它以及何时不使用它。请参阅Java tutorial作为起点。

答案 1 :(得分:1)

删除静电。静态意味着类型FloatingPoint所有对象将共享相同的值。 因此,如果您更改一个,则所有这些都将更改。

    //Variable
    private double precision;


//setPrecision
    public void setPrecision(double value)
    {
        precision = value;
    }

另请注意,您可以使用static方法调用none static字段(因为同一类的所有对象staticshared),但您可以& #39;在none static方法中使用static字段(,因为没有对象可以从获取值)。我想如果你有这个概念,你可以轻松解决问题。

FloatingPoint f1, f2;
f1= new FloatingPoint(0.2);
// Here f1 has precision = 0.2
System.out.print(f1.toString());

f2=new FloatingPoint(1.0);
// Here f1 and f2 have precision = 1.0