Java - 打印随机单词

3

我正在做一道练习,但遇到了问题。我需要打印出5个随机单词,字母数在最小值和最大值之间。

这是我所做的:

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;
    }

我遇到了返回字符串的问题,不知道该怎么做。


1
当你说你“有问题”时,你是指什么?你是否遇到了异常?还是没有返回任何内容? - Anthony Grist
在你卡住的时候寻求帮助是好的,但不要让我们替你完成作业。 - amit
3个回答

5

您将 String 声明在 for 循环内部;每次循环时,您都会获得一个新的(空)字符串。您还添加了字符 '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();

3
"

niz += 'c'; 应该改为 niz = niz + c; 或者 niz += c; [个人更喜欢第一种,因为更清楚对象没有被修改,只是引用被改变]。

另外,niz 应该在循环的作用域之外声明 [在 for 行之前]。

"
String niz = "";
for (int x=0; x<a; x++){
    char c = randomChar();
    niz = niz + c;
}
return niz;

你可能希望在性能成为问题时使用StringBuilder,但我不认为这是本案例的情况。

+= 运算符可以正常工作(尽管它每次都会创建一个新的 String,与 niz = niz + c; 相同)。 - Brian Roach
@Brian Roach:请看我的回答,我说我喜欢它因为它更清晰,而不是说它不起作用,“不起作用”的部分指的是将'c'添加进去而不是加上c - amit
是的,现在你编辑过它后确实是这样说的。它指出了在循环中声明字符串和我的答案中使用 StringBuilder 的问题... - Brian Roach
@Brian Roach:我的回答已经被编辑了8分钟,而你的则是2分钟前。你的评论是6分钟前,别再胡说八道了。 - amit
你介意看一下我的修改,只是加了 // c not 'c',还是你想继续玩这个游戏? - Brian Roach
@Brian Roach:你也可以看一下我的编辑,我只添加了代码片段并将“object is changed”更改为“reference is changed”。我已经结束了这个讨论。没有必要喂那些喜欢搅局的人。 - amit

3

请忽略我的评论,我还没清醒过来。你的randomWord()函数存在作用域问题;你在for循环内部声明了String变量,然后试图在循环结束后返回它 - 我想你会得到编译错误。请将空字符串声明放在for循环之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接