下面的代码用于生成5个随机字符串,包括X和O的9个字符空格。打印字符串时,字符串会不断添加到前一个字符串并变长。每次生成时,如何让字符串在新行上打印?
public static void main(String[] args) {
StringBuilder b = new StringBuilder();
Random r = new Random();
String subset = "XO";
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 9; j++) {
int index = r.nextInt(subset.length());
char c = subset.charAt(index);
b.append(c);
}
String s = b.toString() ;
System.out.println(s);
}
答案 0 :(得分:2)
您需要在第一个for循环中移动stringBuilder初始化。这样,它将删除已经存在的字符,而不是仅仅将它们附加到最后。基本上你的stringBuilder永远不会重置为空。
答案 1 :(得分:1)
您的StringBuilder
永远不会重新初始化。您可以移动
StringBuilder b = new StringBuilder();
在
之后for (int i = 0; i < 5; i++) {
或添加行
b.setLength(0);
行后
String s = b.toString();
答案 2 :(得分:1)
StringBuilder builder = new StringBuilder();
Random random = new Random();
List<String> chars = new ArrayList<String>();
for(int i = 0; i < 4; i++)
{
chars.add("X");
chars.add("O");
}
for (int i = 0; i < 5; i++)
{
Collections.shuffle(chars);
builder.delete(0, builder.length());
for (String charStr : chars)
{
builder.append(charStr);
}
if(random.nextBoolean())
{
builder.append("X");
}
else{
builder.append("O");
}
System.out.println(builder.toString());
}
尝试不在循环内启动变量,除非你真的需要这样做