我的代码出了问题。当我尝试通过调用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);
}
}
答案 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
字段(因为同一类的所有对象static
为shared
),但您可以& #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