Java - 打印随机字

时间:2011-09-06 08:10:14

标签: java

我的运动有问题。我需要在最小和最大字母之间打印五个随机单词。

这就是我所做的:

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时遇到问题。不知道怎么做。

3 个答案:

答案 0 :(得分:5)

您在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();

答案 1 :(得分:3)

niz += 'c';应为niz = niz + c;niz += c; [我个人更喜欢第一个,因为更清楚的是对象未被修改但引用已更改]。

同样,niz应该在[{1}}行之前的循环范围内声明。

for

如果性能问题,您可能想要使用StringBuilder,但我认为不是这种情况。

答案 2 :(得分:3)

忽略我的评论,我还没有醒过来。你的randomWord()有一个范围问题;你在你的for循环中声明你的String变量,然后在循环结束后尝试返回它 - 我想你得到了一个编译错误。修改它,使空字符串声明在for循环之前。