2015-12-10 41 views
0

我是java編程的初學者,正在通過Ex。 Deitel的16.5(隨機句)& Deitel並且問題要求用從文章,名詞,動詞和介詞的給定排列中隨機選擇的詞形成句子,以形成20個句子,其中句子必須按以下順序形成:文章,名詞,動詞,prep,文章和名詞。 它要求在單詞之間留出空格,我不知道該怎麼做。此外,我已經以非常錯誤的方式串聯字符串,因此非常感謝您的幫助和指導。從給定數組中隨機選擇單詞以形成句子

import java.util.*; 

public class Makeit{ 
    private static String[] article ={"the","a","one","some","any"}; 
    private static String[] noun={" boy"," girl"," dog"," town"," car"}; 
    private static String[] verb={" drove"," jmped"," ran"," walked"," skipped"}; 
    private static String[] preposition={" to"," from"," over"," under"," on"}; 


    public static void main(String args[]){ 
    //order to make a sent: a,n,v,p,a,n 

    System.out.println("the sentences picked at random are:"); 
    //loop to generate 20 sentences 
    for(int i=0;i<=19;i++){ 
     System.out.println(makeSentence()); 
    } 
    } 

    public static String makeSentence(){ 
    Random rand = new Random(); 
    int[] index = new int[6]; 
    String sent = new String(); 

    for(int i=0;i<6;i++){ 
     index[i]= rand.nextInt(5); 
    } 
    sent = sent.concat(article[index[0]].concat(noun[index[1]].concat(verb[index[2]].concat(preposition[index[3]].concat(article[index[4]].concat(noun[index[5]])))))); 
    return sent; 
    } 
} 
+0

他們在這一點上是否已經討論過'StringBuilder'?使用顯式字符串構建器的 – user1803551

+0

@ user1803551在此處不是必需的。編譯多個使用'+'的連接以在內部使用StringBuilder,但它明確地使用它只是語法混亂。 –

+0

是的,他們做到了,但我還沒有充分相信這個班級如此不願意使用它......謝謝 –

回答

0

可以從陣列接話,並將其儲存在變量:

String article1 = articles[rand.nextInt(articles.length)]; 
String noun = nouns[rand.nextInt(nouns.length)]; 
// ... 

存儲這些變量直接比陣列中存儲的索引,然後檢索元素,因爲它是更有意義的更好:例如index[1]並不明顯是noun數組中元素的索引,用於獲取名詞;一個名爲noun的變量顯然是要在句子中使用的名詞。

然後串聯並添加空格是很簡單的:

sent = article1 + " " + noun + " " + verb + " " + prepo + " " + article2 + " " + noun2; 

注意,沒有必要指定sent = new String():只要把它初始化,或者完全將其刪除,並直接返回連接字符串:

return article1 + " " + ...; 
+0

謝謝安迪,你的方法對我更有意義。非常感激! –

0

首先,你可以繼續使用concat,但每一個字之間的串" "

sent.concat(article[index[0]].concat(" ").concat(noun[index[1]].concat(" ").concat(verb[index[2]]))); 

它只是變得累贅。其次,你可以使用+運營商,而不是concat當談到String S:

sent = article[index[0]] + " " + noun[index[1]] + " " + verb[index[2]] + " " 
     + preposition[index[3]] + " " + article[index[4]] + " " + noun[index[5]]; 

而且,你不必與​​在循環內部創建一個新的Random各一次。您可以將它移動到循環外的字段或局部變量,並將其傳遞給您的句子製作方法。

最後,在生成隨機數nextInt(5)時,如果在下一個「版本」中更改其大小,您可能需要調用nextInt(noun.length)(或其他數組)。

+0

我不明白如何使用'concat'方法插入空格....你能詳細說明嗎? –

+0

@prameshshakya當然,我編輯了答案。你是否也希望看到'StringBuilder'?你明白爲什麼使用它比現在做的更好嗎? – user1803551

+0

哦,我現在得到它..謝謝...是的,我認爲第一種方法是StringBuilder,因爲它提供了可變性選項,並且除了StringBuffer之外,對於大多數對字符串的「編輯和修改」,除了StringBuffer之外,我還是建議您不要先打擾自己。非常感謝! –