我对Java很陌生,但在此示例10中,我必须初始化2d数组大小n。
初始化后,我想检查对角线条目是否为false,以及是否将其设置为true。之后,我想返回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:对不起,英语和格式化不好。

最佳答案

我假设您有一个名为staticfriendship字段。用这种方法

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


您要声明一个新的本地friendship变量,即shadowing static成员。因此,static friendship字段保持为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;
    }
}

10-05 17:42