我在java中遇到了指针问题。如何修复 java.lang.NullPointerException?

发布于 2024-08-11 07:45:25 字数 906 浏览 2 评论 0原文

这是java中从稀疏矩阵中获取元素的方法。我不断收到 java.lang.NullPointerException 错误。我查看了代码,找不到错误。

public int getElement(int row,int col){
    int result = 0;
    MatrixEntry matrixentry = null;
    if ((row >= 0) && (row < getNumRows()) &&
        (col >= 0) && (col < getNumCols())) {
         if (col == colArray[col].getColumn() &&  row ==rowArray[row].getRow()){
        matrixentry = rowArray[row];
        while (matrixentry.getColumn() < col) {
                 matrixentry = matrixentry.getNextColumn();
        } // end while
                 if (matrixentry.getColumn() > col){
                     return 0;
                 }
                 if (matrixentry == null){
                     return 0;
                 }// 
             result = matrixentry.getData();

         }// 

    }// 
    return result;

} // end 

This is a method that gets a element from a Sparse Matrix in java. I keep getting a java.lang.NullPointerException error. I have looked over the code and can't find the error.

public int getElement(int row,int col){
    int result = 0;
    MatrixEntry matrixentry = null;
    if ((row >= 0) && (row < getNumRows()) &&
        (col >= 0) && (col < getNumCols())) {
         if (col == colArray[col].getColumn() &&  row ==rowArray[row].getRow()){
        matrixentry = rowArray[row];
        while (matrixentry.getColumn() < col) {
                 matrixentry = matrixentry.getNextColumn();
        } // end while
                 if (matrixentry.getColumn() > col){
                     return 0;
                 }
                 if (matrixentry == null){
                     return 0;
                 }// 
             result = matrixentry.getData();

         }// 

    }// 
    return result;

} // end 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

暗喜 2024-08-18 07:45:25

在 while 循环中使用了 matrixentry 并调用 .getColumn().getNextColumn() 后,您可以检查 matrixentry 是否为 null

我想如果你先检查一下你的代码会做得更好:

    matrixentry = rowArray[row];

    while (null != maxtrixentry && matrixentry.getColumn() < col) {
         matrixentry = matrixentry.getNextColumn();
    }

    if (null == maxtrixentry || matrixentry.getColumn() > col){
        return 0;
    }
    result = matrixentry.getData();

You check matrixentry for null after you already used it in the while loop and to call .getColumn() and .getNextColumn().

I guess your code would do better if you checked first:

    matrixentry = rowArray[row];

    while (null != maxtrixentry && matrixentry.getColumn() < col) {
         matrixentry = matrixentry.getNextColumn();
    }

    if (null == maxtrixentry || matrixentry.getColumn() > col){
        return 0;
    }
    result = matrixentry.getData();
所谓喜欢 2024-08-18 07:45:25

我建议您也在代码上运行 Findbugs。它在捕获许多小事情方面做得非常出色,例如在访问矩阵条目后对其进行空检查。

I recommend that you run Findbugs on your code as well. It does an amazing job catching lots of little things, for example the null check on matrixentry after you've already accessed it.

坦然微笑 2024-08-18 07:45:25

您需要预先初始化数组元素。基本的 Sun Java 数组教程 对此进行了介绍。您最终可以使用 Arrays#fill() 为此。

You need to preinitialize the array elements. That's covered by the basic Sun Java Arrays tutorial. You could eventually use Arrays#fill() for that.

清欢 2024-08-18 07:45:25

您的 rowAarray 和 colArray 是否已正确初始化?
根据你的评论,他们不是。

您的代码很难阅读,并且存在不一致的检查,例如

if (matrixentry.getColumn() > col) { 
    return 0;
}
if (matrixentry == null){ 
    return 0;
} 

您在对象上调用方法,然后才检查它是否为 null。

如果你打算将你的生活与编程联系起来,并且它不仅仅是一项家庭作业,我建议你将你的代码演示和表现力视为你的名片。

Are your rowAarray and colArray properly initialized?
According to your comment they are not.

Your code is hard to read and there are inconsistent checks like this

if (matrixentry.getColumn() > col) { 
    return 0;
}
if (matrixentry == null){ 
    return 0;
} 

You call method on the object and only then check it for null.

If your are going to bind your life with the programming and it is not just a HomeWork I would recommend to you to treat your code presentation and expressiveness as your visit card.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文