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以指数的字母.java.util.Random
int nextInt(int n)
StringBuilder - 一个可变的字符序列.不幸的是,有很多.
String += 在循环中,对于较长的字符串,性能会非常差for (int j = 0; j <= lengthOfName; j++)是一个错误的错误freq == 7 && freq == 8 是一个逻辑矛盾我强烈建议你做一些小而简单的练习来学习Java基础知识.codingbat.com很棒; 它有数百个,它们会自动评分,因此您可以知道解决方案何时按预期工作.它有关于逻辑,字符串,数组等的部分.
最简单的解决方案是在字母表中只有重复:
String alphabet = "aab";将有a两倍的概率balphabet从频率表中以编程
方式生成您的代码有很多重复相同的问题:
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等于那些错误条件中的任何数字时,你的字符串中不会添加任何数字,它会变小.
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |