Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何用不同的方法获得数组的长度?_Java_Arrays_Oop_Multidimensional Array_Getter - Fatal编程技术网

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

Java:如何用不同的方法获得数组的长度?,java,arrays,oop,multidimensional-array,getter,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 } } 不要在方法

我的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;
    }
}
这显然不起作用,因为
矩阵
是构造函数的局部


我不知道如何才能使
矩阵
不在方法体之外工作而可用于其他方法。有人能告诉我怎么做吗?

解决问题的唯一可能方法是告诉“getRows()”方法将矩阵作为参数

这样,您就不会在方法之外创建代码,而是使用给定的方法


公共类MyMatrix
{
公共MyMatrix(int[][]元素)
{
int[][]矩阵=元素;
int length=getRows(矩阵);
}
公共int getRows(int[][]矩阵)
{
返回矩阵长度;
}

}
如果教科书问题如您所述,那么这是一个技巧性问题

显然,如果
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; }
}
但这些都是“诡计”的答案。。。因为他们依赖诡辩来解释“不在方法体之外编写任何代码”的实际含义。事实上,我不认为有一个解决方案在某种意义上不是一个骗人的答案


坦率地说,我怀疑在教科书中包含这样的技巧性问题是否明智。学生不会从尝试(或失败)解决技巧性问题中学习如何编程

将矩阵存储为实例变量。必须将
int[][]
成员添加到类中。也许这不算“方法体之外的代码”。你得到问题的答案了吗?