帮助创建随机字符串

Max*_*Max 5 java string random

我需要创建一个随机字符串,其长度应介于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";
            }
        }
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 20

对不起,但代码写得太差,难以挽救.我推荐这样的东西.

    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);
Run Code Online (Sandbox Code Playgroud)

要点是:

  • 使用java.util.Random,特别nextInt(int n)int在给定范围内 获得随机
    • 不需要时髦的公式
  • 在循环中构建字符串时,请使用StringBuilder.
  • 使用一个字母串,并charAt以指数的字母.

API链接

相关问题


原始代码存在问题

不幸的是,有很多.

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

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


信件分布不均匀

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

  • String alphabet = "aab";将有a两倍的概率b
  • 您可以alphabet从频率表中以编程 方式生成
    • 我会留下这个练习(如果你需要,你可以提出另一个问题)

  • @Max,然后使用长度为100的字符串"aaaaaabbccc ...."(而不是"abcde ..."),并使用上面的代码.polygeneL使用'like'这个词,所以我想他希望你做一些工作:-) (2认同)
  • 也许http://stackoverflow.com/questions/2971315/string-stringbuffer-and-stringbuilder/(Java)更合适?由于73883是C#.NET,我同意这几乎是相同的概念. (2认同)
  • 很好的回答polygenelubricants!而且莫伦不是白痴. (2认同)

Sou*_*sou 5

条件if(freq == X && freq == X+1)总是如此false.

你可能想要使用||(OR)


Pau*_*des 5

您的代码有很多重复相同的问题:

if(freq == 28 && freq == 29) { ... }
Run Code Online (Sandbox Code Playgroud)

你告诉Java在freq equals to 28AND 时遵循一个条件freq equals to 29.不可能.您将需要使用OR运算符:

if(freq == 28 || freq == 29) { ... }
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是,当freq等于那些错误条件中的任何数字时,你的字符串中不会添加任何数字,它会变小.