2015-04-15 44 views
1

在我的Java教科书问题: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可用于其他方法,而无需在方法体外工作。有人可以告诉我如何做到这一点?

+0

将矩阵存储为实例变量。 – Stultuske

+1

您必须为您的班级添加一个int [] []'成员。也许这并不算作“方法体外的代码”。 – Eran

回答

0

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

这样,您不是在方法外部创建代码,而是使用您提供的内容。


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


希望这回答了你的问题。

让我知道结果是什么:)

祝你好运!

+0

你有没有得到你的问题的答案? – TejjD

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; } 
} 

但这些都是“猫腻”的答案...因为他们依靠的是诡辩,而不是写在方法体外的任何代码“”实际上是指“”。事实上,我认为从某种意义上说,解决方案并不是一个绝妙的答案。

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