我的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 :(得分: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]在方法体外编写任何代码" 实际上意味着什么。事实上,我认为在某种意义上,解决方案不是一个特技答案。
坦率地说,我怀疑在教科书中包含这样的技巧问题的智慧。学生不会学习如何通过尝试(和失败)来解决技巧问题!