当前位置: 首页 > 知识库问答 >
问题:

无法读取数组长度,因为“< local >”为空

翟渝
2023-03-14

我有一个java中的练习,它的文本是:

矩阵类表示整数数组。其框架如下:公共类矩阵{private int[]]mat;/*创建一个矩阵对象,其内容由矩阵矩阵表示。*/public Matrix(int[][]mat){…}/*返回由调用该方法的对象表示的矩阵元素之和。*/public int sumElements(){…}/*通过移除行i和列j*/公共子矩阵矩阵(int i,int j){。。。}/*返回一个二维整数数组,其元素(i,j)是通过移除行i和列j从接收对象(this)获得的子矩阵元素之和。*/public int[][]subscriptValue(){…}/*返回数组的文本表示形式*/public String toString(){…}

编写矩阵类和矩阵测试类,该类仅包含主方法,并执行以下操作: 使用户输入二维整数数组a并创建矩阵对象m。 向用户查看创建的对象。 要求用户输入行i的索引和列j的索引,并向用户显示通过删除行i和行j从m获得的子矩阵。 向用户显示值​​在通过为每个可能对(i,j)移除行i和列j而获得的所有子矩阵中。

我不明白为什么编译器给我这个错误:"线程"main"中的异常java.lang.NullPointerException:无法读取数组长度,因为"this.mat"为空"

package Matrice1;

public class Matrice1 {
    private int[][] mat; 
    
    
    public Matrice1(int[][] m) {
        this.mat = new int[mat.length][mat[0].length];
        
        for(int i = 0; i < mat.length; i++) {
            for(int j = 0; j < mat[0].length; j++) {
                this.mat[i][j] = m[i][j]; 
            }
        }
    }
    
    
    public int sommaElementi() {
        int somma = 0; 
        
        for(int i = 0; i < this.mat.length; i++) {
            for(int j = 0; j < this.mat[0].length; j++) {
                somma += this.mat[i][j]; 
            }
            
        }
        return somma; 
    }
    
    
    public Matrice1 sottomatrice(int i, int j) {
        int [][] n = new int[this.mat.length -1][this.mat[0].length -1];
         
        for(int h = 0; h < n.length; h++) {
            for(int k = 0; k < n[h].length; k++) {
                int a = h; 
                int b = k; 
                if(a >= i) {
                    a++;
                }
                if(b >= j) {
                    b++;
                }
                n[h][k] = this.mat[a][b]; 
            }
        }
        Matrice1 m1 = new Matrice1(n);
        
        return m1; 
    }
    

    public int[][] valoreSottomatrici(){
        int[][] valore = new int[this.mat.length][this.mat[0].length]; 
        
        for(int i = 0; i < this.mat.length; i++) {
            for(int j = 0; j < this.mat[0].length; j++) {
                Matrice1 m = sottomatrice(i, j); 
                valore[i][j] = m.sommaElementi();
                
            }
        }
        return valore; 
    }
    
    public String toString() {
        String s = ""; 
        
        for(int i = 0; i < this.mat.length; i++) {
            for(int j = 0; j < this.mat[0].length; j++) {
                s += this.mat[i][j] + " ";
            }
            s += "\n"; 
        }
        return s; 
    }

}


package Matrice1;

public class ProvaMatrice {
    public static void main(String[] args) {
        InputWindow in = new InputWindow(); 
        OutputWindow out = new OutputWindow(); 
        
        
        int k, h; 
        k = in.readInt("Numero righe: "); 
        h = in.readInt("Numero colonne: "); 
        int[][] m1 = new int[k][h]; 
        
        for(int i = 0; i < m1.length; i++) {
            for(int j = 0; j < m1[i].length; j++) {
                m1[i][j] = in.readInt("Inserisci valore in posizione " + i + " " + j +" : "); 
            }
        }
        
        Matrice1 mat = new Matrice1(m1); 
        
        out.write("Matrice inserita: " + mat.toString());
        
        
        
        
        
    }

}
 

共有1个答案

焦苏燕
2023-03-14

在初始化之前,您正在使用<code>mat</code>(可能是打字错误):

public Matrice1(int[][] m) {
        this.mat = new int[mat.length][mat[0].length];
        
        for(int i = 0; i < mat.length; i++) {
            for(int j = 0; j < mat[0].length; j++) {
                this.mat[i][j] = m[i][j]; 
            }
        }
    }

this.mat=new int[mat.length][mat[0].长度];应该是this.mat=new int[m.length][m[0].长度];

 类似资料:
  • 我有这个主代码 这是我的个人课 我不明白当我在InputPerson()类中推送这段代码时,它会显示我输入的人的信息 但当我在Display()类中尝试这样做时,它总是告诉我错误“无法读取数组长度,因为”“为null” 我不知道如何将我在InPutPerson()类中输入的数据传递到Display()类,请帮助我

  • 我尝试将元素映射到[]以获得角度。但如果我检查了对象的长度,则始终为0。。 屏幕如果I控制台.log(对象) 我做错了什么?

  • 我正在尝试用Tesseract OCR阅读器阅读pdf。不过,它对图像文件非常有效。 以下是我所做的: > 创建一个Maven项目 添加了tess4j版本4.4.1作为依赖项 将java版本更改为13 添加了以下代码: 之后,我发现以下错误: 我该如何着手解决这个问题?

  • 问题内容: 我知道这是一个很普遍的问题,我在Stack Overflow和其他网站(包括datatables网站)上阅读了所有类似的问题。 为了澄清,我正在使用 PHP Codeigniter 物质学 我还确保我正确接收了JSON数组: 我的HTML表格如下所示: 这是我的功能: 我得到的错误是 未捕获的TypeError:无法读取未定义的属性’length’ 问题答案: 原因 此错误通常意味着j

  • 问题内容: 当我想从其他服务器访问远程wildfly服务器上的EJB时,出现以下错误。 如果我在服务器内访问EJB,则不会收到任何身份验证错误。我使用以下方法访问服务器; 基本上,如果我在server1中调用它,就没有问题。如果我从server2调用此命令,则会收到错误消息。我假设它在server1中存在的server2中查找身份验证文件。 我不确定是否必须在EJB或wildfly上进行一些配置才

  • 这里有两节课。SaleGood类有一个可变特性a,应该在另一个名为Inventory类中使用。类Inventory有两个可变特性,inventoryAmount和inventoryBill,这两个特性都应该在类Salegood中使用。 我正在使用getter/setter。然而,错误说 我以为是因为这个代码错了?因此我不能使用。我试了一整天。但仍然不知道如何修复它。我尝试了,也是错误的。 在课堂上