2014-01-06 149 views
0

我知道這個問題有一個簡單的解決方案,但它讓我發瘋。爲什麼在打印新的矩形時出現錯誤?任何幫助感激!對象構造

public class Rectangle { 

    public Rectangle(int x, int y, int width, int length) { 

     x = 5; 
     y = 10; 
     width = 20; 
      length = 30; 

     Rectangle box = new Rectangle(5, 10, 20, 30); 
     System.out.println(new Rectangle()); 
    } 
} 
+1

你能發佈你收到的錯誤嗎? – imkendal

+7

您可能會混淆語言 - 至少,您是如何標記您的帖子的。'public'和'class'目前不是[JavaScript](http://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java)關鍵字。 –

+7

您正在調用Rectangle的構造函數中的Rectangle構造函數!這是無限遞歸,這將導致StackOverflow異常 –

回答

0

下面是一些代碼,做什麼,我想你也想:

public class Rectangle 
{ 
    int x, y, width, length; //declares the class's fields 
    public Rectangle(int x, int y, int width, int length) 
    { 
     this.x = x; //initializes the field x to the value of the local variable x 
     this.y = y; //initializes the field y to the value of the local variable y 
     this.width = width; //initializes the field width to the value of the local variable width 
     this.length = length; //initializes the field length to the value of the local variable length 
     System.out.println(this); //prints this object. should look similar to "[email protected]" 
    } 
} 

請採取基本的Java教程(例如Providing Constructors for Your Classes),它會讓你的生活更輕鬆。

1

您的代碼有幾個問題。首先,您可能不想在Rectangle的構造函數中實例化Rectangle,因爲這會導致無限遞歸。第二個問題是你正在調用一個不存在的構造函數。

當你寫:

new Rectangle() 

Java編譯器會尋找在不接受任何參數Rectangle類的構造函數。但是你的代碼沒有這樣的構造函數。您可以添加一個這樣的:

public Rectangle(){ 
      //Your code here to instantiate a default rectangle 
    } 

通常是一個構造函數用於設置實例變量的值的一類,而不是執行代碼你寫的方式。您可以將創建矩形的那些線移動到主要方法中以測試代碼。

0

您正在調用一個來自參數化構造函數的非參數化/默認構造函數。這種情況下的JVM無法創建默認構造函數。因此,在這種情況下,您需要將非參數化構造函數顯式包含到您的類中。

public class Rectangle { 

public Rectangle(int x, int y, int width, int length) { 

    x = 5; 
    y = 10; 
    width = 20; 
     length = 30; 

    Rectangle box = new Rectangle(5, 10, 20, 30); 
    System.out.println(new Rectangle()); 
} 
public Rectangle(){} 
} 

這將是沒有錯誤的。

+0

無錯誤,由於構造函數中的無限遞歸,StackOverflow異常_除外。 – GriffeyDog

0

首先,代碼(如您所提供的)無法編譯:您沒有將x,y,width和height聲明爲Rectangle的成員變量(字段)。例如。

// I'm assuming you want these private and final (I would) 
private final int x, y, width, height; 

替代,一個快速的黑客:

int x, y, width, height; 

你也試圖打電話給你的println線0參數的構造函數。你的類沒有0參數的構造函數;它有一個4參數的構造函數。我懷疑(如上所述)你真的想打印this

但是,除非你在課堂上增加一個合適的toString方法,否則這本身並沒有多大幫助。例如: -

public String toString() { 
    StringBuilder sb = new StringBuilder("Rectangle: "); 
    sb.append("x=").append(x); 
    sb.append(", y=").append(y); 
    sb.append(", width=").append(width); 
    sb.append(", height=").append(height); 
    return sb.toString(); 
} 

你可能要考慮實施equals()hashCode()也一樣,如果你選擇使這個類不可變的(我會)。你可以ixquick *或duckduckgo *這個 - 有很多解釋。

[*]他們是搜索引擎:我不使用谷歌。