[英]Java - printing random word
我的运动有问题。 我需要在最小和最大字母之间打印五个随机单词。
这就是我所做的:
package Vjezba;
import acm.program.*;
import acm.util.RandomGenerator;
import java.util.*;
public class String2 extends ConsoleProgram {
public void run () {
for (int i = 0; i<5; i++){
String a = randomWord();
println(a);
}
}
private String randomWord() {
int a = rgen.nextInt(MIN_LETTER, MAX_LETTER);
for (int x=0; x<a; x++){
String niz = "";
char c = randomChar();
niz += 'c';
}
return niz;
}
private char randomChar(){
return (char) rgen.nextInt('a', 'z');
}
private static RandomGenerator rgen = new RandomGenerator();
private static int MIN_LETTER = 3;
private static int MAX_LETTER = 10;
}
我有返回String的问题。 不知道怎么做。
你在for循环中声明了你的String
; 每次循环都会得到一个新的(空)字符串。 你还要添加字符'c',而不是你的char c
的内容
String niz = "";
for (int x=0; x<a; x++){
//String niz = "";
char c = randomChar();
niz += c; // c not 'c'
}
虽然在这个简单的情况下它并不重要,但java中的String
是不可变的 - 它无法更改。 每次你执行niz += c
它会创建一个新字符串。 无论何时构建字符串,都要使用StringBuilder
:
StringBuilder niz = new StringBuilder();
for (int x=0; x<a; x++){
char c = randomChar();
niz.append(c);
}
return niz.toString();
niz += 'c';
应该是niz = niz + c;
或者niz += c;
[我个人更喜欢第一个,因为更清楚的是对象没有被修改但参考被更改]。
另外, niz
应该在循环范围之外[在for
line之前]声明。
String niz = "";
for (int x=0; x<a; x++){
char c = randomChar();
niz = niz + c;
}
return niz;
如果性能是一个问题,你可能想使用StringBuilder ,但我认为不是这里的情况。
忽略我的评论,我还没有醒过来。 你的randomWord()有一个范围问题; 你在for
循环中声明了你的String变量,然后在循环结束后尝试返回它 - 我想你得到了一个编译错误。 修改它,使空字符串声明在for
循环之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.