随着循环继续执行,删除随机生成的字符串

时间:2014-07-07 18:21:00

标签: java string random stringbuilder

下面的代码用于生成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);
    }               

3 个答案:

答案 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());
}

尝试不在循环内启动变量,除非你真的需要这样做