首先对不起,如果不是一切都可以理解(我来自德国)。请尝试理解我对java很新,并且可能犯了一些愚蠢的错误。我有两节课。一个是构造函数和函数,另一个是菜单。
Class 1(构造函数和函数):
public class Matrix {
private float[][] matrix;
...
public void createMatrix(int zei, int spa){
...
public void printMatrix(){
int x = 0;
while (x < this.matrix.length){
for (float elem : this.matrix[x]){
System.out.printf("%10d", elem);
}
x++;
System.out.println();
}
System.out.println();
}
2级(菜单):
public class MenuMatrix{
public static void menue(){
...
if (m1 == null){
Matrix m1 = new Matrix();
m1.createMatrix(zei, spa);
}
else if (m2 == null){
Matrix m2 = new Matrix();
m2.createMatrix(zei, spa);
}
else{
System.out.println("Which matrix do you want to replace?");
m1.printMatrix();
m2.printMatrix();
int x = readInteger("Please choose matrix (1) or (2).");
...
我想确保只存在2个此类对象。因此,我已经检查了对象是否已经存在(m1 / m2 == null)。有第一个错误。在带有if子句的行中,它告诉我&#34; m1 / m2无法解析为变量&#34;。另一个错误出现在m1 / m2.printMatrix()行中。 Eclipse说&#34; m1 / m2无法解决&#34;。 几个不同网站上的信息告诉我它应该以这种方式工作。我希望你能告诉我问题究竟在哪里。
提前致谢。
答案 0 :(得分:2)
查看代码示例:
if (m1 == null){
Matrix m1 = new Matrix();
m1.createMatrix(zei, spa);
}
else if (m2 == null){
Matrix m2 = new Matrix();
m2.createMatrix(zei, spa);
}
请注意,{/ 1}}和Matrix m1
变量在首次引用它们之后声明为。这些声明也在m2
块的范围内,一旦执行流程退出块并继续在外面,它们将导致它们被丢弃。
换句话说,当解析器到达if
项检查时,它会注意到if (m1 == null)
和m1
名称的变量尚不存在。
您需要在m2
语句的正文之外移动声明,以便在尝试在给定范围内使用它们之前确保它们存在。快速搜索应提供有关任何语言的变量范围规则的良好信息。
此处的一种可能方法是将变量转换为if
类的私有成员,如下所示:
MatrixMenu
这是解决问题的一种可能方法。
PS:另一点是您应该考虑删除public class MatrixMenu {
private Matrix m1;
private Matrix m2;
// ...
if (m1 == null){
m1 = new Matrix();
m1.createMatrix(zei, spa);
}
else if (m2 == null){
m2 = new Matrix();
m2.createMatrix(zei, spa);
}
// ...
方法,而是将这些参数传递给createMatrix
构造函数,以便在Matrix
返回后立即生成有效/初始化的矩阵实例。换句话说:
new
答案 1 :(得分:1)
您在声明它们之前引用这些变量。