2016-05-20 6 views
0

У меня возникла проблема с моим кодом. Поскольку я пытаюсь сравнить две переменные с разными значениями, вызывая метод 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; 
    } 
} 

И это мой главный класс

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); 
    } 
} 
+1

Вы сохраняете значение в 'precision' и не имеете поля' value' в своем классе ... это совсем не ясно, каково ваше намерение. –

+1

'private static double precision' - предлагаю вам читать статические переменные. –

+0

Привет, но если мне нужно использовать static для переменной точности, есть ли другой способ решения? – Auric

ответ

1

Как я пытаюсь сравнить две переменные с разными значениями, вызвав метод IsEqual().

У вас нет переменных с различными значениями, потому что у вас есть только один значения - статическая переменное: (. Изменить декларацию setPrecision не быть статичными тоже)

private static double precision; 

Объявление, что static означает, что оно связано с типом, а не с любым экземпляром вашего типа. Ваш класс не объявляет поля экземпляров и, следовательно, не имеет никакого состояния (кроме идентификатора объекта).

Простое исправление, чтобы сделать это поле экземпляра:

private double precision; 

Но вы должны прочитать больше на то, что static означает, так что вы можете решить, когда использовать его и когда не использовать его в будущем. См. Java tutorial в качестве отправной точки.

+0

Привет, Джон, но если мне нужно использовать статическую мою переменную точность и public static void setPrecision (двойное значение), есть ли другой способ решения? – Auric

+0

@Auric: Да, вы должны сделать этот * метод * нестатичным тоже. Подумайте об этом - если вы вызываете 'FloatingPoint.setPrecision (5.0)', на какой объект вы хотите повлиять? –

+0

Привет, Джон, вы имеете в виду удалить слово static? – Auric

1

Снимите статическую. Статический означает, что все объекты типа FloatingPoint будут иметь одинаковое значение. Итак, если вы измените один, все они будут меняться.

//Variable 
    private double precision; 


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

Также обратите внимание, что вы можете вызвать static поле из метода none static (Поскольку static является shared для всех объектов одного и того же класса), но вы не можете использовать 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 
+0

привет там, да, на самом деле я знал, что если я удалю статику, все будет правильно, но я должен использовать static для моей setPrecision и моей переменной точности – Auric

+0

проверить отредактированный ответ, если вы измените точность для 'f2', это изменится для 'f1' также, потому что это' static'. Вам нужно удалить статику из 'precision variable' и из' setPrecision'. – user3185569

+0

Хорошо, спасибо @ user3185569 – Auric

Смежные вопросы