字符串连接不按预期工作

4

I have the following code:

public boolean prontoParaJogar() throws RemoteException {
    int i;
    int j;
    if (this.jogadores==2) {
        this.jogando=1;
        for (i=0;i<3;i++)
            for(j=0;j<3;j++) {
                this.tabuleiro[i][j]=0;
            }

        for (i=0;i<3;i++) {
            System.out.println("Linha "+i+": ");
            System.out.print(this.tabuleiro[i][0]+' ');
            System.out.print(this.tabuleiro[i][1]+' ');
            System.out.print(this.tabuleiro[i][2]);
            System.out.println("");
        }


        return true;
    } else {
        return false;
    }
}

它正在打印以下退出信息:
行0:
32320
行1: 
32320
行2: 
32320
行0: 
32320
行1: 
32320
行2: 
32320
这不是我预期的结果。应该是以下输出:
行0:
0 0 0
行1:
0 0 0
行2:
0 0 0
我无法弄清楚为什么它没有按预期运行。

1
你应该展示更多的代码,否则很难弄清楚你想要做什么。 - MRalwasser
嗯,不……按照现在的方式回答很容易的 ;) - Brian Roach
仅作一个观察:它打印了两倍于预期的行数,因为该方法是 RMI 服务实现的一部分,并且被两个客户端调用,所以代码运行了两次。 - Victor
5个回答

12

这是因为你在变量中添加了' ',由于' '是一个ASCII码为32的字符,它将32加到你数组中的零值上,并输出32。你需要编写两个print语句才能得到你想要格式化的输出。


@Brian Roach @Jonas Elfström 所有发现这个问题的人+1 :) 很棒的眼力,大家好厉害 :) - Boro
@boro 我先到了!比布莱恩早了16秒 :d - Ali1S232

10
this.tabuleiro[i][0]+' '

' '代表空格符,其ASCII值为32。单引号表示一个char值而不是一个String

this.tabuleiro[i][0]+" "

会连接一个空格。


6
您正在进行0+32的加法操作,因为空格' '对应的ASCII码是32,所以这里使用了加法运算,而不是字符串拼接。请更改为:
System.out.print(this.tabuleiro[i][0]+" ");

1

同时不要这样做:

for (i=0;i<3;i++)
    for(j=0;j<3;j++) {
        this.tabuleiro[i][j]=0;
    }

而不是这个:

for (i=0;i<3;i++) {
    for(j=0;j<3;j++) {
        this.tabuleiro[i][j]=0;
    }
}

或者在将来的某个时候,你可能会这样做:

for (i=0;i<3;i++)
    System.out.println("i=" + i);
    for(j=0;j<3;j++) {
        this.tabuleiro[i][j]=0;
    }

并且会惊讶于第二个循环没有被执行三次。


1
在你的输出行中,你使用了+ ' '。这会将字符' '(字符值32)添加到tabuleiro的每个条目中。你需要使用+ " "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接