Java常见疑难问题-字符串5


25. 一段程序的三个Bug
Random rnd = new Random();
StringBuffer = null;
switch (rnd.nextInt(2)) {
case 1:
= new StringBuffer(‘P');
case 2:
= new StringBuffer(‘G');
default:
= new StringBuffer(‘M');
}
.append(‘a');
word.append(‘i');
word.append(‘n');
System.out.println(word);
上面的程序目的是等概率的打印 Pain、Gain、Main 三个单词,但多次运行程序却发现永远
只会打印 ain,这是为什么?

第一个在于:rnd.nextInt(2)只会返回0、1 两个数字,所以上面只会走case 1: 的分支语
句,case 2: 按理是永远不会走的。

第二个在于:如果case语句不以break结束时,则一直会往向运行,即直到执行到break
的case语句止,所以上面的的语句每次都会执行default分支语句。

第三个在于:StringBuffer的构造函数有两种可接受参数的,一个是StringBuffer(int
capacity)、另一个是StringBuffer(String str),上面用的是StringBuffer(char)构造函数,实质上
运行时将字符型转换成了int型,这样将字符当作StringBuffer的初始容量了,而不是字符
本身。

以下是修改后的程序片段:
Random rnd = new Random();
StringBuffer word = null;
switch (rnd.nextInt(3)) {
case 1:
word = new StringBuffer(“P”);
break;
case 2:
word = new StringBuffer(“G”);
break;
default:
word = new StringBuffer(“M”);
break;// 可以不要

}
word.append(‘a');
word.append(‘i');
word.append(‘n');
System.out.println(word);

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Java常见疑难问题-字符串5
本文地址:https://www.zhiletu.com/archives-238.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微