我对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:对不起,英语和格式化不好。
最佳答案
我假设您有一个名为static
的friendship
字段。用这种方法
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;
}
}