2011-09-06 86 views
3

我在練習時遇到問題。我需要在最小和最大字母之間打印五個隨機單詞。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; 
    } 

我有返回字符串的問題。不知道該怎麼做。

+1

當你說你「有問題」時,你是什麼意思?你是否遇到異常?沒有被返回? –

+0

+1在你卡住後詢問幫助,而不是要求我們爲你做功課。 – amit

回答

3

忽略我的意見,我還沒有甦醒過來。你的randomWord()有一個範圍問題;你在你的for循環中聲明瞭你的String變量,然後在循環結束後嘗試返回它 - 我想你會得到一個編譯錯誤。對其進行修改,使空字符串聲明位於for循環之前。

+0

很好的發現。 +1 –

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如果性能是一個問題,但我不認爲這是在這裏的情況。

+0

'+ ='工作得很好(不過,並不是真的,因爲它每次都會創建一個新的'String',就像'niz = niz + c;'一樣) –

+0

@Brian Roach:閱讀我的答案,我說我更喜歡它清楚,不是它不起作用,「不起作用」部分是指'加'''c''而不是'c'。 – amit

+0

是的,現在你已經編輯它確實這麼說。它注意到在循環中聲明的字符串以及我的答案中的StringBuilder的問題... –

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