【问题标题】:Nullpointerexception while checking an array检查数组时出现空指针异常
【发布时间】:2013-11-17 16:56:51
【问题描述】:

我对 java 还是很陌生,但我必须初始化一个大小为 n 的二维数组,在这个例子中是 10。 初始化后,我想检查对角线条目是否为假,如果将它们设置为真。在我想返回 i 的值之后。

这是我的代码:

首先初始化数组:

public static void init(int n) {
        boolean friendship[][] = new boolean[n][n];}

在我尝试了这个之后:

public static int addUser(String name) {
        int id=0;
        for ( int i=0;i<friendship.length;i++) {
            if ( friendship[i][i] = false) {
                friendship[i][i] = true;
                id = i;
            }
        }
        return id;
    }

可悲的是它的投掷:

Exception in thread "main" java.lang.NullPointerException
    at x.SocialNetwork.addUser(SocialNetwork.java:18)
    at x.SocialNetwork.main(SocialNetwork.java:53)

我能做些什么来解决这个问题?

PS:抱歉英文和格式不好。

【问题讨论】:

  • 你为什么要检查它们是否是假的?为什么不把它们设置为真呢? (顺便说一下,使用 == 而不是 = 来比较事物)

标签: java arrays nullpointerexception 2d


【解决方案1】:

我假设您有一个名为 friendshipstatic 字段。在这个方法中

public static void init(int n) {
     boolean friendship[][] = new boolean[n][n];
}

您正在声明一个新的本地 friendship 变量,即 shadowing static 成员。因此,staticfriendship 字段仍然是null,当您尝试在addUser 中访问它时,您会得到一个NullPointerException

使用

public static void init(int n) {
     friendship = new boolean[n][n];
}

再次假设你有类似的东西

public static boolean[][] friendship;

在这

if ( friendship[i][i] = false) {

您实际上将friendship[i][i] 设置为false。相等运算符是==


这就是我对你的班级的看法

public class Test {
    /* visibility identifier doesn't matter */ static boolean[][] friendship;

    public static void init(int n) {
        // this is a different variable from the member declared above
        // it is a local variable
        boolean friendship[][] = new boolean[n][n]; 
    }

    public static int addUser(String username) {
        int id=0;
        for ( int i=0;i<friendship.length;i++) {
            if ( friendship[i][i] = false) { // referring to static field, not the local variable in init()
                friendship[i][i] = true;
                id = i;
            }
        }
        return id;
    }
}

【讨论】:

  • OP 没有静态字段,什么是静态初始化?它是一个静态初始化器吗?为什么这里需要这个静态?
  • @nikpon 在这里使用static 只是一种设计选择。这不是真正的问题。问题是 OP 有两个同名变量,一个是static,一个是本地变量。本地人正在跟踪static
  • 您在哪里看到这里的设计?您对静态的看法绝对不正确。
  • @nikpon 你可以去掉static,假设他们有一个名为friendship的实例字段,OP也会遇到同样的问题。
  • 不,这绝对没有必要,同样的问题不是问题,你没有什么可以改善OP问题
猜你喜欢
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2016-03-20
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多