2011-09-22 109 views
0

我想從此方法返回兩個數字。我認爲這是正確的。我哪裏錯了?從Java方法返回數組

public int[] getDimension() { 
    int shapeWidth = 0; 
    int shapeHeight = 0; 
// ..... 
    int[] result = new int[] {shapeWidth, shapeHeight}; 
    return result; 
} 

然後在一個呼叫站點,這是正確的嗎?

public int getWidth() { 
     return getDimension()[0]; 
    } 

我在問,因爲我相信有一個錯誤,但我沒有看到它。

回答

1

您的代碼看起來不錯,但如果您只需要一對,請儘量不要使用數組。

由於Java沒有元組/對,所以你必須實現它們,但這很容易。有關可能的實現,請參閱this question

public class Test { 

    public static void main(String args[]) { 
     int width = getDimension().getLeft(); 
     System.out.println(width); 
    } 

    public static Pair<Integer, Integer> getDimension() { 
     int shapeWidth = 5; 
     int shapeHeight = 10; 
     return new Pair<Integer, Integer>(shapeWidth, shapeHeight); 
    } 
} 

這比Dimension類更好,因爲您可以在代碼中的任何位置使用它。

+0

有趣......你喜歡這個更好的原因是它'文件'數組必須只有2個元素?這是一個有趣的折衷,因爲另一方面,你現在還有一個班級需要處理。或者你對性能更感興趣? – pitosalas

+0

這樣你就不用擔心訪問索引超出邊界0-1的元素。 – n0rm1e

4

這很好。短,但完整的程序來證明它的工作:

public class Test { 

    public static void main(String args[]) { 
     int width = getDimension()[0]; 
     System.out.println(width); 
    } 

    public static int[] getDimension() { 
     int shapeWidth = 5; 
     int shapeHeight = 10; 
     int[] result = new int[] {shapeWidth, shapeHeight}; 
     return result; 
    } 
} 

可以使result報關行稍微簡單,順便說一句:

int[] result = {shapeWidth, shapeHeight}; 
3

而不是使用一個數組,我會建議使用類

class Dimensions { 
    private int width; 
    private int height; 

    public Dimensions(int width, int height) { 
     this.width = width; 
     this.height = height; 
    } 

    // add either setters and getters 
    // or better yet, functionality methods instead 
} 

這會給你編譯時的參照完整性,這比根據「我們知道索引0是寬度和索引1是高度」來推斷好得多。

如果你仍然想使用數組,Jon的答案是現貨。