Java:为什么这段代码不起作用?

时间:2011-05-10 19:49:07

标签: java

有人能告诉我这个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)。我想我不能投票给你们所有人,我只能投票一次。

5 个答案:

答案 0 :(得分:1)

我的猜测是,当它为空时,你不希望它打印任何东西。

请将此用作if语句:

if (data[j][0] != null) {

在java中,复杂变量是对象的引用。您可以将两个变量指向同一个对象。当变量指向什么时,它就是null。你不能取消引用一个null变量,就在你得到一个NullPointerException时。

原始数据类型(如int,long,byte等)的行为方式不同。每次你指定你正在制作数据的副本。它们不能为空。

答案 1 :(得分:0)

首先,您只迭代一个维度(包含jk变量)。我想你想迭代你的数据结构的两个维度(因此你需要几乎两个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语句。