gpt4 book ai didi

java - 帮助创建随机字符串

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:06 24 4
gpt4 key购买 nike

我需要创建一个长度应该在 6 到 10 之间的随机字符串,但它有时只生成大约 3 到 5 的长度。这是我的代码。谁能找出问题所在? :(

            int lengthOfName = (int)(Math.random() * 4) + 6;
String name = "";
/* randomly choosing a name*/
for (int j = 0; j <= lengthOfName; j++) {
int freq = (int)(Math.random() * 100) + 1;
if(freq <= 6){
name += "a";
}if(freq == 7 && freq == 8){
name += "b";
}if(freq >= 9 && freq <= 11){
name += "c";
}if(freq >= 12 && freq <= 15){
name += "d";
}if(freq >= 16 && freq <= 25){
name += "e";
}if(freq == 26 && freq == 27){
name += "f";
}if(freq == 28 && freq == 29){
name += "g";
}if(freq >= 30 && freq <= 33){
name += "h";
}if(freq >= 34 && freq <= 48){
name += "i";
}if(freq == 49 && freq == 50){
name += "j";
}if(freq >= 51 && freq <= 55){
name += "k";
}if(freq >= 56 && freq <= 60){
name += "l";
}if(freq == 61 && freq == 62){
name += "m";
}if(freq >= 63 && freq <= 70){
name += "n";
}if(freq >= 71 && freq <= 75){
name += "o";
}if(freq == 76 && freq == 77){
name += "p";
}if(freq == 78){
name += "q";
}if(freq >= 79 && freq <= 84){
name += "r";
}if(freq == 85 && freq == 86){
name += "s";
}if(freq == 87 && freq == 88){
name += "t";
}if(freq >= 89 && freq <= 93){
name += "u";
}if(freq == 94){
name += "v";
}if(freq == 95 && freq == 96){
name += "w";
}if(freq == 97){
name += "x";
}if(freq == 98 && freq == 99){
name += "y";
}if(freq == 100){
name += "z";
}
}

最佳答案

很抱歉,代码写得太差了,无法挽救。我推荐这样的东西。

    Random r = new Random(); // just create one and keep it around
String alphabet = "abcdefghijklmnopqrstuvwxyz";

final int N = 10;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(alphabet.charAt(r.nextInt(alphabet.length())));
}
String randomName = sb.toString();

System.out.println(randomName);

要点是:

  • 使用 java.util.Random , 特别是 nextInt(int n)获得随机 int在给定范围内
    • 不需要时髦的公式
  • 在循环中构建字符串时,使用 StringBuilder .
  • 使用字母串,charAt索引它的字母。

API 链接

相关问题


原代码有问题

不幸的是,有很多。

  • String +=在循环中对于较长的字符串会产生非常差的性能
  • for (int j = 0; j <= lengthOfName; j++)是一个 off-by-one-error
  • freq == 7 && freq == 8是逻辑矛盾
  • 只是不必要的冗长!
    • 每当你写这样的东西时,警告标志就会消失

我强烈建议您做很多小而简单的练习来学习 Java 基础知识。 codingbat.com是很棒的;它有数百个,它们会自动评分,因此您会知道您的解决方案何时按预期工作。它包含逻辑、字符串、数组等部分。


关于不均匀的字母分布

最简单的解决方案是只在字母表中重复:

  • String alphabet = "aab";将有可能a b 的两倍
  • 您可以生成 alphabet以编程方式从频率表
    • 我将把它留作练习(或者如果需要,您可以提出另一个问题)

关于java - 帮助创建随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com