有人能告诉我这个Java代码有什么问题吗?
这个数组是:static String [][] data = new String[6][2];
但在这种情况下,data[0][1]="abcd"
和data[1][1]="efgh"
,剩余的data[2-5][1]
应为null
。我只是想打印出非null
个。在(j=2,k=3)
,代码在此之后不会执行。例如,“我在这里3”没有打印出来。
int k=1;
System.out.println("data[2][0]="+data[2][0]);
for(int j=0; j<data.length; j++,k++) {
System.out.println("j="+j+" k="+k);
if (!(data[j][0].equals("null"))) {
System.out.println("I am here2");
sbissues = sbissues.append("\n");
sbissues = sbissues.append(k);
sbissues = sbissues.append(". ");
sbissues = sbissues.append(data[j][1]);
}
System.out.println("sbissues="+sbissues.toString());
System.out.println("I am here1");
}
System.out.println("I am here3");
输出如下:
data[2][0]=null
j=0 k=1
I am here2
sbissues=
1. abcd
I am here1
j=1 k=2
I am here2
sbissues=
1. abcd
2. efgh
I am here1
j=2 k=3
问题是我从未到过“我在这里3” 谢谢大家的答案,他们都是正确的(使用!= null而不是.equals)。我想我不能投票给你们所有人,我只能投票一次。
答案 0 :(得分:1)
我的猜测是,当它为空时,你不希望它打印任何东西。
请将此用作if语句:
if (data[j][0] != null) {
在java中,复杂变量是对象的引用。您可以将两个变量指向同一个对象。当变量指向什么时,它就是null。你不能取消引用一个null变量,就在你得到一个NullPointerException时。
原始数据类型(如int,long,byte等)的行为方式不同。每次你指定你正在制作数据的副本。它们不能为空。
答案 1 :(得分:0)
首先,您只迭代一个维度(包含j
和k
变量)。我想你想迭代你的数据结构的两个维度(因此你需要几乎两个for
循环)。所以我会从类似的东西开始:
for (int j=0; j<data.length; j++) {
for (int k=0; k<data[j].length; k++) {
// ... here goes the printing
}
}
答案 2 :(得分:0)
与其他人一样,我不确定您的代码尝试做什么。据我所知,我们应该修复一些错误。也许修复它们会让它做你想做的事。
首先...
if (!(data[j][0].equals("null"))) {
这应该是......
if (data[j][0] != null) {
其次...
在if检查中,您正在检查data[j][0]
是否为空。然后,在if块的最后一行,您使用的是data[j][1]
。我猜这些应该是相同的,而不是不同的索引?或者您可能希望使用k
来索引?
...尾
您正在为每次迭代重用StringBuilder实例。 toString()
方法不会刷新它的缓冲区。如果您希望输出不同的内容,请尝试在每次循环迭代结束时刷新SB实例。如果您打算附加到任何现有字符串,那么您正在做正确的事。
答案 3 :(得分:0)
你应该得到NullPointerException
。你发布了所有的输出吗?你在运行你的程序时是重定向stdout还是stderr?
OP评论,
谢谢,这有效!但为什么??由于data [j] [0]的类型为String,因此我不应该使用data [j] [0] .equals(null),而不是!=
不,因为如果data[j][0]
为null
,尝试在其上调用equals()
会引发NullPointerException
。您无法访问不存在的对象的方法或字段。
顺便说一句,这个NullPointerException
应该在您的输出中可见。你有没有看到类似的东西?
答案 4 :(得分:0)
首先,如果是str == null
,那么
str.equals("null")
生成NullPointerException
。所以你可能想要改变
if (!(data[j][0].equals("null"))) {
到
if (data[j][0] != null) {
然后,给出初始化
data[2][0] = "hello";
data[2][1] = "world";
程序将打印(我删除了"I am here"
s):
data[2][0]=hello
j=0 k=1
sbissues=
j=1 k=2
sbissues=
j=2 k=3
sbissues=
3. world
j=3 k=4
sbissues=
3. world <----
j=4 k=5
sbissues=
3. world
j=5 k=6
sbissues=
3. world
你没有获得案件的任何输出的原因
data[0][1]="abcd"
data[1][1]="efgh"
^ both values put in column 1 (will not affect the data[j][0] check!)
是因为如果第0列非空,您只会将内容附加到sbissues
。
在上述作业中,您只为第1列设置了一个值,即矩阵中没有行会触发if语句。