Java - 对象无法解析(到变量)

时间:2015-10-16 23:02:43

标签: java object constructor

首先对不起,如果不是一切都可以理解(我来自德国)。请尝试理解我对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;。 几个不同网站上的信息告诉我它应该以这种方式工作。我希望你能告诉我问题究竟在哪里。

提前致谢。

2 个答案:

答案 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)

您在声明它们之前引用这些变量。