Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 - Fatal编程技术网

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

Java 前一个变量的值变为当前变量的值,java,Java,我的代码有问题。当我试图通过调用isEqual()方法比较两个不同值的变量时。但它给了我一个真实的结果。有人能发现问题吗? 我的浮点类 import io.*; //Class FloatingPoint public class FloatingPoint { //Constant public static final double MINPRECISION = 0.00000001; //Variable private static double

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

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;
    }
}
当我试图通过调用isEqual()方法比较两个不同值的变量时

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

private static double precision;
(将
setPrecision
的声明也更改为非静态。)

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

简单的修复方法是将其设置为实例字段:

private double precision;
但是你应该阅读更多关于静态的内容,这样你就可以决定什么时候使用它,什么时候不使用它。将此视为一个起点

当我试图通过调用isEqual()方法比较两个不同值的变量时

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

private static double precision;
(将
setPrecision
的声明也更改为非静态。)

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

简单的修复方法是将其设置为实例字段:

private double precision;

但是你应该阅读更多关于静态的内容,这样你就可以决定什么时候使用它,什么时候不使用它。请参阅作为起点。

移除静电传感器。静态意味着类型为
FloatingPoint
的所有对象将共享相同的值因此,如果您更改了其中一个,则所有这些选项都将更改。

    //Variable
    private double precision;


//setPrecision
    public void setPrecision(double value)
    {
        precision = value;
    }
还请注意,您可以从
非静态
方法调用
静态
字段(因为
静态
对于同一类的所有对象都是
共享的
),但不能在
静态
方法中使用
非静态
字段(因为没有对象可以从中获取值)。我想如果你有了这个概念,你就能很容易地解决你的问题

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

移除静电传感器。静态意味着类型为
FloatingPoint
的所有对象将共享相同的值因此,如果您更改了其中一个,则所有这些选项都将更改。

    //Variable
    private double precision;


//setPrecision
    public void setPrecision(double value)
    {
        precision = value;
    }
还请注意,您可以从
非静态
方法调用
静态
字段(因为
静态
对于同一类的所有对象都是
共享的
),但不能在
静态
方法中使用
非静态
字段(因为没有对象可以从中获取值)。我想如果你有了这个概念,你就能很容易地解决你的问题

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


您正在将值存储在
precision
中,并且在您的类中没有
value
字段。。。你的意图一点也不清楚。
私有静态双精度
-我建议你仔细阅读静态变量。您好,但如果我必须使用静态变量精度,还有其他方法解决吗?你将值存储在
精度
中,并且在类中没有
字段。。。你的意图一点也不清楚。
私有静态双精度
-我建议你仔细阅读静态变量。您好,但如果我必须使用静态变量精度,还有其他解决方法吗?您好,Jon,但是如果我必须使用静态变量精度和公共静态void setPrecision(双值),还有其他解决方法吗?@Auric:是的,你也需要让这个方法成为非静态的。想想看——如果你调用
FloatingPoint.setPrecision(5.0)
你想让它影响哪个对象?嗨,乔恩,你的意思是删除static这个词吗?但是如果我想让这个方法保持static这个词,我应该添加另一个私有变量来比较吗?@Auric:那么你应该认真考虑一下你实际上想要实现什么。你为什么想要一个类型范围的可变状态和一个每个实例的可变状态?嗨,Jon,但是如果我必须使用静态变量精度和公共静态void setPrecision(双值),还有其他解决方法吗?@Auric:是的,你也需要使该方法非静态。想想看——如果你调用
FloatingPoint.setPrecision(5.0)
你想让它影响哪个对象?嗨,乔恩,你的意思是删除static这个词吗?但是如果我想让这个方法保持static这个词,我应该添加另一个私有变量来比较吗?@Auric:那么你应该认真考虑一下你实际上想要实现什么。为什么您需要一个类型范围的可变状态和一个每个实例的可变状态?您好,是的,实际上我知道如果我删除了static,一切都会正确,但是我必须使用static作为setPrecision和variable precision检查编辑过的答案,如果您更改了
f2
的精度,它也将更改为
f1
,因为它是
静态的
。您还需要从
precision variable
setPrecision
中删除static。我尽量避免“所有对象”作为一个概念共享一个值,因为不必有任何对象。我只是将它建模为“变量与类型相关联,而不是与类型的任何一个实例相关联”。你完全正确,Jon,但我认为新手更容易以这种方式理解它。每个静态字段都有一个副本,每个人都可以访问(因此他们共享该字段)。@user3185569:仅以与所有字符串共享该字段相同的方式。我认为最好避免给人一种误导性的印象(它是在一个对象池中共享的,而不是完全独立的)