不使用stringbuilder或power工具对字符串进行随机化和改组

问题描述

我想在不使用任何数组,StringBuilder或电动工具(为您工作的软件包或方法)并且不使用Math.random()的情况下改组字符串。

下面的代码有效,但是我不喜欢它,因为我不能使用字符串生成器或.append()。有人可以帮我修复它吗?

public class loopPrr
{
  static String shuffle(int a) {
       
    String s = "BaaBooDaaDoo";
    StringBuilder sb = new StringBuilder(a); 
  
    for (int i = 0; i < a; i++) { 
      int r = (int)(s.length() * Math.random()); 
  
      sb.append(s.charAt(r)); 
    } 
  
    return sb.toString();         
  }
}

解决方法

如果我做对了,您可以简单地使用String:

static String shuffle(int a) {
    String s = "BaaBooDaaDoo";

    String sb = "";

    for (int i = 0; i < a; i++) {
        int r = (int) (s.length() * Math.random());

        sb += s.charAt(r);
    }

    return sb;
}

我建议更改“ sb”变量的名称,以免造成误解。

,

可以通过将Fisher--Yates algorithm应用于输入字符串的字符数组来对字符串进行混洗。

该算法主要包括如下所示在随机索引处交换字符。

static String shuffle(String str) {
    char[] arr = str.toCharArray();
    for (int i = str.length() - 1; i > 0 ; i--) { // starting from the last character
        int x = (int)(i * Math.random()); // next index is in range [0...i-1]
        char t = arr[i];
        arr[i] = arr[x];
        arr[x] = t;
    }
    return new String(arr);
}

如果需要从预定义的字母表中生成长度为a的随机字符串,则可以基于String的先前实现来实现以下方法,以确保如果{ {1}}:

a >= alphabet.length

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...