一天中的好時光
我必須在我的網站上實作一些功能。當用戶進入網站時,他必須在某個字串中輸入一些應該發生的錯誤。如果他選擇 0,則將顯示原始字串而不會出錯。如果用戶在錯誤欄位中輸入 1,則字串應顯示為 1 錯誤。例如,單詞“programming”應該顯示為“rrograming”或“prugramming”,或者在字串中添加/洗掉一個字符。因此,如果錯誤為 2,則錯誤也應為 2。
此外,每次的結果都應該相同。有人告訴我在 Random 類中使用種子,但現在我不知道。
我正在用 Java 和一些 JS 編程
如果您遇到同樣的問題或經歷,請給我一些想法或資源來學習。
uj5u.com熱心網友回復:
帶有種子的亂數每次都會產生相同的值序列,因此每次都使用相同的亂數。
訣竅是使用基于單詞內容的隨機種子。否則,您最終會對所有單詞進行相同的切割模式。
更改字母的可能性可以按單詞長度的順序排列。并且插入是去除的兩倍,兩者都很少見。
String mutilateWord(String word, int times) {
//Random random = new Random(42);
// Or better (as different words get differently mixed up:
Random random = new Random(word.hashCode());
for (int t = 0; t < times; t) {
int chars = word.length;
// If a letter modification has the same likeliness:
int choices = chars 2 1; // change some letter (twice) add remove
word = switch (random.nextInt(choices)) {
case 0 -> removeRandomLetter(word, random);
case 1, 2 -> insertRandomLetter(word, random);
default -> changeRandomLetter(word, random);
};
}
return word;
}
由于 java 12 可以使用上面的 switch 運算式。
上面的內容也會破壞殘缺,因此您可能更喜歡首先有一個時間回圈更改隨機字母(或不更改),然后再進行第二次回圈添加/洗掉字母。
uj5u.com熱心網友回復:
您朋友的想法是正確的,每次將亂數種子設定為相同的值會產生相同的結果。但是,例如,您可以在每次在地圖中計算結果時快取結果。將鍵設定為錯誤號,將值設定為字串結果。在每個函式呼叫中,您檢查錯誤號是否被快取,如果是這種情況,您無需計算就回傳它,否則您計算結果然后快取它并最終回傳它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488812.html
上一篇:在C中更改字串中特定字符的顏色
下一篇:將字串輸入拆分為離散數字和運算子
