2015-12-18 168 views
0

所以,我正在製作一個程序,計算出給定7個速度和6個軌跡角度的距離。給定執行必要操作的公式,我必須將結果存儲在一個二維數組中,並以整潔有序的方式打印結果。構建對象混亂陣列

我對我的程序的某個特定部分無法工作產生困惑。對我來說這似乎很好,但是輸出結果並不是我期望的,因爲它是隨機的,不合邏輯的。錯誤是從代碼中給出的輸出結果爲「Catapult @ xxxxx ....」,其中「x」代表隨機的一系列字母,數字或字符。我不確定他們來自哪裏,爲什麼,所以我想要一個解釋,以及如何解決這個地雷問題。源代碼如下:

static final int ROWS = 7; 
static final int COLS = 6; 

public static void main(String[] args) 
{ 
    double[] angles = {25.0, 30.0, 35.0, 40.0, 45.0, 50.0}; 
    double[] rads = new double[COLS]; 
    for(int i = 0; i < COLS; i++) 
    { 
     rads[i] = Math.toRadians(angles[i]); 
    } 
    double[] speeds = {20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0}; 

    Catapult[][] projectile = new Catapult[ROWS][COLS]; 
    for(int a = 0; a < ROWS; a++) 
    { 
     for(int b = 0; b < COLS; b++) 
     { 
      projectile[a][b] = new Catapult(speeds[a], rads[b]); 
     } 
    } 

如果你是第二個for循環projectile[a][b] = new Catapult(speeds[a], rads[b]);後鍵入System.out.print(projectile[a][b] + " ");,那麼這將導致前面描述的錯誤。

+1

您需要在'Catapult'中重寫'toString'。 –

+0

謝謝你的回答,但你能解釋一下嗎?我不確定你在'Catapult'中重寫'toString'是什麼意思。 – Tetramental

+0

這是一條評論,但你從'Object'獲得了默認的'toString'。請參閱Java教程中的[覆蓋和隱藏](https://docs.oracle.com/javase/tutorial/java/IandI/override.html)。 –

回答

0

你可以試試這個:

class Catapult { 

    @Override 
    public String toString() { 
     // Do here what you want to print 
     return "Catapult{}"; 
    } 
} 

編輯:

公共字符串的toString() 返回該對象的字符串表示。通常,toString方法返回一個「文本表示」該對象的字符串。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。建議所有子類重寫此方法。 Object類的toString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示形式。換句話說,此方法返回一個等於以下值的字符串: getClass()。getName()+'@'+ Integer.toHexString(hashCode()) 返回: 對象的字符串表示形式。

+0

我不確定這種方法應該做什麼。你能否更深入地解釋它? – Tetramental

+0

這種方法在我的主要方法或外部?如果在外面,我將如何將此方法調用到我的主方法中? – Tetramental

+0

當您輸出Catapult參考時,它將被自動調用 –