在vb 2015中有什麼方法可以讓我接受一個字,並且每次都以不同順序隨機排列字母順序?每次使用不同的順序在一個字中隨機化字母
回答
有算法用於生成所有字母的排列。 Knuth算法是更簡單的算法之一,並且具有高效的內存。但如果你需要的是任何排列,那麼你可以做一個洗牌。一個簡單而有效的洗牌就是將每個位置的字母與來自隨機位置的字母進行交換。我的一本舊教科書稱爲蒙特卡羅洗牌。
Private Function ShuffleWord(Word As String) As String
Dim rand As New Random
Dim j As Integer
Dim chars() As Char = Word.ToCharArray
For i As Integer = 0 To chars.Length - 1
j = rand.Next(Word.Length)
Dim t As Char = chars(i)
chars(i) = chars(j)
chars(j) = t
Next
Return New String(chars)
End Function
你可以這樣調用它:
TextBox1.Text = ShuffleWord(TextBox1.Text)
這種方法簡單直觀,但也有其他方法可以做到洗牌:https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Pencil-and-paper_method。
對不起,但這個答案有缺陷。參見[Naïveté的危險](http://stackoverflow.com/a/33619422/1070452)。 – Plutonix
@Plutonix你參考了一篇關於洗牌的漂亮文章,我同意上面的算法是有偏見的。有人可能會爭辯說,無偏差算法總是最好的 - 除非有人試圖複製特定的洗牌過程。無論如何,感謝您指出這一點,它會讓我們都成爲更好的程序員。 – JerryM
使用新隨機只是錯誤的 - 它會在循環中產生相同的結果。此外,代碼並不符合您發佈的維基鏈接 - 即一旦交換項目就將其刪除,因此每個項目最多隻能交換一次。答案是使用'rand.Next(0,i + 1)'循環*向後*。這會鎖定/觸發已交換的元素(來自prev迭代的'i'不在'rand.Next()'範圍內)。當試圖複製一個模式時,Random是完全不合適的,Mersenne Twister就是這樣的。 – Plutonix
最短的是order by random number,像這樣:
Dim input As String = "Hello, World!"
Dim rnd As New Random
Dim shuffledInput As String = input.OrderBy(Function() rnd.Next).ToArray
'outputs something like: "!ld ,WoloeHlr"
一點解釋爲什麼它的工作原理 - 任何字符串都可以作爲一個字符數組,這意味着你可以將它應用LINQ進行處理,同用任何其他IEnumerable(Of T)。第二部分是知道你可以從一個字符數組指定字符串,那麼下面這一行工作完全正常:
Dim charArray As String = {"a"c, "b"c, "c"c} 'contains "abc"
另一種方法 - 字符串生成器,會更有效 - 但只是爲了顯示這個想法 - 從input
創建新的字符串通過隨機拍攝一個字符:
Private Function randomizeString(ByVal input As String) As String
Dim rtn As String = ""
Dim i As Integer
While input.Length > 0
i = ran.Next(0, input.Length)
rtn &= input.Substring(i, 1)
input = input.Remove(i, 1)
End While
Return rtn
End Function
很好的答案,我不知道你可以通過rnd.next訂購 – Nefariis
- 1. 如何使一個字母順序不同的字母順序的比較器的字母順序
- 2. 生成隨機數字的字母/數字,但不能使用相同的字母/數字兩次
- 3. 隨機函數隨機化字母
- 4. 字典的順序每次變化
- 5. 隨機化大寫字母
- 6. 隨機化的字母在單詞
- 7. 如何隨機化每個骰子的不同數字?
- 8. 數字是隨機順序
- 9. 隨機顯示會員,而不是按字母順序
- 10. 隨機數和生成數字的相同順序在每個執行
- 11. 如何在每個字母上設置隨機文本大小一次? (處理)
- 12. 如何在同一個程序/函數中每次生成不同的隨機數字集?
- 13. 如何使文本中的每個字母在JavaScript中使用不同的隨機顏色
- 14. 在不同的java程序中生成兩個相同的隨機字母數字字符串
- 15. 的JavaScript扭轉字母每個單詞的順序在一個字符串
- 16. 隨機化行的順序
- 17. IEnumerator的隨機化順序
- 18. 在一個字符串中隨機播放字母C++
- 19. 隨機數總是在同一順序
- 20. 用不同的隨機選擇的數字更新每一行
- 21. 隨機數字/字母值
- 22. 程序從遠程目錄中打印隨機字母而不是隨機字
- 23. 每次獲得不同的隨機值
- 24. 隨機數不同的輸出每次
- 25. 我想每次打字時都會顯示一個字母,然後每按一次就移動一個字母
- 26. Generting隨機(字母)在PHP
- 27. 在字符串中隨機化字母C
- 28. 隨機替換字中的字母
- 29. silverstripe groupby按字母順序排列的第一個字母
- 30. 爲每個字母點擊一次
請添加一些關於您需要什麼以及您如何接近它的詳細信息。 – Brody
我想要在開始程序之前輸入一個單詞,我不會隨機化這個單詞,所以這些單詞處於不同的位置,因爲我沒有任何想法,所以我沒有去過任何東西。 – Tom