【问题标题】:How to generate a char randomly between 'X' and 'O'?如何在“X”和“O”之间随机生成一个字符?
【发布时间】:2014-08-25 08:21:24
【问题描述】:

公共静态字符串生成(){

    StringBuffer stringBuffer = new StringBuffer();
    for(int i = 0; i < TicTacToeUtil.NUM_OF_SPACES + 1; i++){
        for(int j = 0; j < TicTacToeUtil.NUM_OF_SPACES + 1; j++) {
            stringBuffer.append("1");
        }
        stringBuffer.append(" ");
    }
    String finalString = stringBuffer.toString();
    return finalString;
}

上面的代码基本上是一个游戏,NUM_OF_SPACES = 2,所以打印出来的是“111 111 111”,但是,我想用'X'或'O'替换所有的1,这是随机选择的这两个字符。例如,“XOX XOO OOO”,这是随机生成的。提前致谢。

【问题讨论】:

  • 好吧,如果你有 50/50 的机会选择 XO...
  • (提示:这就是提示。你如何写一些东西在 50% 的时间里是一个方向,而在另外 50% 的时间里是另一个方向?它涉及随机性......)
  • 请注意,您通常应该更喜欢StringBuilder 而不是StringBuffer,因为后者是不必要的同步。

标签: java random stringbuffer


【解决方案1】:

您可以使用Random#nextBoolean() 方法随机获取truefalse。如果值为true,则追加'X。否则追加'O':

public static String generate()
{
    Random r = new Random(); // create a Random object
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < 2 + 1; i++) {
        for (int j = 0; j < 2 + 1; j++) {
            if (r.nextBoolean()) {  // r.nextBoolean() return 'true' or 'false'
                stringBuilder.append("X");
            } else {
                stringBuilder.append("O");
            }
        }
        stringBuilder.append(" ");
    }
    String finalString = stringBuilder.toString();
    return finalString; // return stringBuilder.toString();
}

【讨论】:

    【解决方案2】:

    您可以使用Random 类来生成随机数。这里我使用了 Random 类中的nextBoolean() 方法来随机生成布尔值。

    public static String generate() {
        StringBuilder stringBuilder = new StringBuilder();
        Random r = new Random(); // create a Random object
        for (int i = 0; i <TicTacToeUtil.NUM_OF_SPACES+ 1; i++) {
            for (int j = 0; j <TicTacToeUtil.NUM_OF_SPACES + 1; j++) {
                if (r.nextBoolean()) {  // r.nextBoolean() return 'true' or 'false'
                    stringBuilder.append("X");
                } else {
                    stringBuilder.append("O");
                }
            }
            stringBuilder.append(" ");
        }
        String finalString = stringBuilder.toString();
        return finalString;
    }
    

    我为TicTacToeUtil.NUM_OF_SPACES 选择了一个值2,输出如下所示,

    XXX XOO XXX

    我用StringBuilder 替换了StringBuffer,因为这是常见的做法。 (我认为StringBuffer 类被复制了。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多