2017-09-26 181 views
2

在java中。 它應該使用隨機數生成器來返回隨機選擇的具有指定長度的文本的子字符串。如果長度爲負值或大於文本長度,則該方法應拋出IllegalArgumentException。例如,chooseSubstring(「abcde」,4,new Random())應該在大約一半時間返回「abcd」,大約一半時間返回「bcde」。將字符串變量拆分爲指定長度的隨機子字符串

public static String chooseSubstring (String text, int length, Random rand) 
{ 
    int randomNum = rand.nextInt(length); 
    String answer = text.substring(randomNum); 
    return answer; 
} 

基本上,我想從變量文本返回一個字符串。子字符串必須是可變長度的長度。這個子字符串的開始應該從由隨機數發生器確定的隨機位置開始。我的問題是,隨機數發生器不能確保子字符串是正確的長度。

 System.out.println(chooseSubstring("abcde", 4, new Random())); 

應該返回abcdbcde大約相同數量的時間。相反,它正在返回: bcde cde de abcde。 有關如何解決這個問題的任何信息將大大幫助謝謝!

+0

'randomNum'是從'0'到'length'(不包括)的值。它將是0,1,2或3中的一個。 –

回答

1

您的代碼正在取一個0到length之間的隨機索引的子字符串,排他性。您必須指定結束索引,以便它不會擴展到字符串的末尾。您還需要縮小起始索引的範圍,以便末尾索引不會超過字符串:

int randomNum = rand.nextInt(text.length() - length + 1); 
String answer = text.substring(randomNum, randomNum + length); 
+0

用您的答案,它每次只返回完整的字符串。 –

+0

@ZacharyKing固定。 – shmosel

+0

哦,你正在使用其他方式使用子字符串。因此,不僅僅是出發點,它還使用長度作爲結束點。這似乎很明顯,現在感謝您的幫助! –

相關問題