2013-11-02 2 views
-1

af, ae и be - целые числа, и здесь я проверяю, равны ли они 0. Если нет, я хочу вернуть значение null. Если они равны нулю, я хочу вернуть glorpPoly. По какой-то причине, однако, он всегда возвращает null, даже когда условие выполняется ... кто-нибудь знает, почему? все эти значения относятся к типу нашего учителя, созданного под названием MyDouble. все они были инициализированы для этого значения, но это все еще не работает.Если инструкция else не работает должным образом

MyDouble af = a.multiply(poly.c); 
    MyDouble ae = a.multiply(poly.b); 
    MyDouble bf = b.multiply(poly.c); 
    MyDouble cf = c.multiply(poly.c); 
    MyDouble be = b.multiply(poly.b); 
    MyDouble ad = a.multiply(poly.a); 
    MyDouble ce = c.multiply(poly.b); 
    MyDouble bd = b.multiply(poly.c); 
    MyDouble cd = c.multiply(poly.a); 
    //Adding the the variables and creating new coefficients 
    MyDouble newA = af; 
    MyDouble newB = ae.add(bf); 
    MyDouble newC = cf.add(be).add(ad); 
    MyDouble newD = ce.add(bd); 
    MyDouble newE = cd; 
    MyDouble zero = new MyDouble(0) 
if(af != zero && ae !=zero && be != zero){ 

     return null; 
    } 
    else{ 
     MartianPolynomial glorpPoly = new MartianPolynomial(newC,newD,newE); 
     return glorpPoly; 
    } 
} 
+1

'0! = Zero'. Это даже компилируется? – clcto

+0

Не должно быть, если (af! = 0 && ae! = 0 && be! = 0) (если они являются ints? – dcp

+0

Вы не можете: 'if ((af * ae * be)! = 0) '? –

ответ

3

Объекты не могут сравниваться с использованием == или !=. Вы должны использовать метод equals():

if (!af.equals(zero) && !ae.equals(zero) && !be.equals(zero) { 
    ... 
} 

Операторы != и (==) Проверка идентичности объекта, то есть, если обе ссылки указывают на тот же экземпляр. Они не сравнивают «ценность» экземпляров.

+0

Спасибо, сэр, это решило мою проблему. – user2059856

+0

Вы должны принять это как ответ. – bobwienholt

0

LE: если 'аф', 'ае' и 'быть' являются числами (тип INT, двойные, с плавающей точкой), вы можете использовать:

if(af != 0 && ae !=0 && be != 0) 

, но если они являются объектами , вы можете либо сравнить их атрибуты на 0, либо сравнить их с объектом того же типа. См .: http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx

+0

Предполагая, af "," ae "и" be "являются правильными типами. –

+1

он сказал, что 'af', 'ae' и 'be' являются целыми числами, но после редактирования они выглядят как объекты –

+0

Yah, вот что я рисую Это очень распространенная ошибка. Просто обновите свой ответ чтобы соответствовать его решению сейчас –

0

Как насчет

if(! af.equals(zero) && ! ae.equals(zero) && ! be.equals(zero)) ... 
0

Если вы проверяете, если они все равны нулю, просто умножить их все вместе, и если результат равен нулю, ну вы знаете ...

Я предполагаю, что, поскольку вы не представили свой класс MyDouble, что у вас есть способ получения value?

if ((af.value() * ae.value() * be.value()) != 0) 

OP, пожалуйста, предоставьте нам ваш MyDouble.java класса.

+0

Вы не можете перегружать оператора в java. Это не будет работать с пользовательскими определенными классами, поскольку вопрос задает (сейчас) – clcto

+0

Ну, я не знаю, как вернуть значение OP 'MyDouble', поэтому я предполагаю, что это« двойной »... –

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