Java:如何用不同的方法获取数组的长度?

时间:2015-04-15 10:45:02

标签: java arrays oop multidimensional-array getter

我的Java教科书中的一个问题:


完成本课程:

public class MyMatrix
{
    public MyMatrix(int[][] elements)
    {
        // create new matrix with elements as the content
    }
    public int getRows()
    {
        // get the number of rows of the matrix
    }
}

不要在方法体外编写任何代码。


这就是我想要做的事情:

public class MyMatrix
{
    public MyMatrix(int[][] elements)
    {
        int[][] matrix = elements;
    }
    public int getRows()
    {
        return matrix.length;
    }
}

这显然不起作用,因为matrix是构造函数的本地。

我没有看到如何在不在方法体外工作的情况下使matrix可用于其他方法。有人能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:0)

解决问题的唯一方法是告诉“getRows()”方法将Matrix作为参数。

这样,您不是在方法之外创建代码,而是使用您给出的内容。


public class MyMatrix
{
    public MyMatrix(int[][] elements)
    {
        int[][] matrix = elements;
		int length = getRows(matrix);
    }
    public int getRows(int[][] matrix)
    {
        return matrix.length;
    }
}


希望这能回答你的问题。

让我知道结果是什么:)

祝你好运!

答案 1 :(得分:0)

如果教科书问题与你所说的一样,那么这是一个棘手的问题。

显然,如果getRows必须返回传递给构造函数的数组的长度,那么必须有一些从构造函数到方法的信息传递。这意味着必须有一个构造函数直接或间接写入的变量,并且该方法直接或间接读取。

我能想出的最好的是:

public class Base {
    int[][] matrix;
    Base(int[][] elements) { matrix = elements; }
    int getRows() { return matrix.length; }
}

public class MyMatrix extends Base { 
    // No code added here
    public MyMatrix(int[][] elements) { super(elements); }
    public int getRows() { return super.getRows(); }
}

或者......你可以这样写:

public class MyMatrix  { 
    // No "code" added outside of the method bodies.  This
    // is a declaration ... not "code".
    private int[][] array;
    public MyMatrix(int[][] elements) { array = elements; }
    public int getRows() { return elements.length; }
}

但这些都是"技巧"答案......因为他们依赖于诡辩而不是" [d]在方法体外编写任何代码" 实际上意味着什么。事实上,我认为在某种意义上,解决方案不是一个特技答案。

坦率地说,我怀疑在教科书中包含这样的技巧问题的智慧。学生不会学习如何通过尝试(和失败)来解决技巧问题!