2016-01-18 48 views
2

我正在做一個非常基本的複雜數字類Java,但是當我測試我的add和multiply函數時,我沒有得到我期望的結果。我不明白什麼是錯的或如何解決它。在Java中添加和乘法函數返回錯誤結果

當我運行程序我得到以下輸出:

A + B:ComplexNumber @ 1540e19d

A * B:ComplexNumber @ 677327b6

我應該得到適當的兩個複數的加法和乘法(遵循複數的規則當然)

任何幫助將不勝感激!提前致謝。

下面是代碼:

public class ComplexNumber { 

private double real; 
private double imaginary; 

public ComplexNumber(double r, double i) { 
    real = r; 
    imaginary = i; 
} 

public double real() { 
    return real; 
} 

public double imaginary() { 
    return imaginary; 
} 

public ComplexNumber add(ComplexNumber c) { 
    double newr = real + c.real(); 
    double newi = imaginary + c.imaginary(); 
    return new ComplexNumber(newr, newi); 
} 
public ComplexNumber multiply(ComplexNumber c) { 
    double newr = real*c.real() - imaginary*c.imaginary(); 
    double newi = real*c.imaginary() + imaginary*c.real(); 
    return new ComplexNumber(newr, newi); 
} 

public static void main(String[] args) { 

    ComplexNumber c1 = new ComplexNumber(1.0, 2.0); 
    ComplexNumber c2 = new ComplexNumber(-1.0, 0.5); 
    String c1plusc2 = c1.add(c2).toString(); 
    String c1timesc2 = c1.multiply(c2).toString(); 

    System.out.println("a+b :" + c1plusc2); 
    System.out.println("a*b :" + c1timesc2); 

    } 
    } 
+0

你真的應該進入正常格式化你的代碼的習慣。特別是因爲現在有很多編輯器/ IDE會自動執行它。否則,你會對閱讀它的人表示不敬。 –

+0

@SergeyTachenov我實際上想要做到這一點,但爲了提交我的代碼爲每一行,需要4個縮進,並且它花了我一直。關於如何將代碼全部4個縮進一次移動到右側的任何技巧?一次只做一行是一件麻煩事! –

+0

我通常只是在我的IDE中選擇它(NetBeans,但其他許多工具都可以),按Tab鍵將其右移,然後按Ctrl-C和Ctrl-Z(撤消移位)。但是真的,即使沒有(假設你沒有IDE),如果格式正確,那麼只有第一行和最後一行('class'和'}')會被搞亂。然後,只需在這些行中添加4個空格,並保持其餘行不變,並且最終得到幾乎格式正確的代碼(如果只有一個類,那麼沒有人會介意這兩行)。 –

回答

6

你需要重寫toString方法在ComplexNumber類:

@Override 
public String toString() { 
    return real + " + i*" + imaginary; 
} 

.add() & .multiply()方法返回一個ComplexNumber對象。默認情況下,

System.out.println("a*b :" + c1.multiply(c2)); 

評估爲

System.out.println("a*b :" + c1.multiply(c2).toString()); 

toString()方法從Object類繼承(因爲所有的類從Object繼承)。而且,由於你不ComplexNumber類中重寫它,你從ObjecttoString()方法默認返回值:

[email protected] 

編輯:

toString()返回String。更改

ComplexNumber c1plusc2 = c1.add(c2).toString(); 
ComplexNumber c1timesc2 = c1.multiply(c2).toString(); 

String c1plusc2 = c1.add(c2).toString(); 
String c1timesc2 = c1.multiply(c2).toString(); 

輸出:

a+b :0.0 + i*2.5 
a*b :-2.0 + i*-1.5 
+0

我傾向於同意,但這也意味着你不打印一個值,你只是打印字符串Type @ memoryAddress版本 – plainOldNerd

+0

字符串版本是什麼? –

+0

Java中的對象被視爲某個內存地址的Type(它是實例的類)。所以,你的情況是這個方法返回一個類型爲ComplexNumber的對象,它的存儲地址爲1540e19d,所以它打印出字符串 「ComplexNumer @ 1540e19d」 – plainOldNerd