所以我创建了一个程序来帮助我决定玩哪一种游戏。在我开始我的问题之前,让我向您展示我的代码:
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
isArray := [10]string{"Paladins", "Overwatch", "CS:GO", "Tanki", "Left 4 Dead", "Rocket League", "Call Of Duty : AW", "Portal", "Star Citizen", "Star Wars : Battlefront"}
fmt.Print("0,1,2,3,4,5,6,7,8,9 := ")
var (
va string
ar string
)
fmt.Scanln(&va)
i, _ := strconv.Atoi(va)
fmt.Print("You Should Play : ")
fmt.Print(isArray[i], "\n")
fmt.Print("[Y/N] := ")
fmt.Scanln(&ar)
if ar != "N" || ar != "n" {
fmt.Print("OK")
}
time.Sleep(3 * time.Second)
}所以当我已经知道哪个号码会触发一个游戏时,问题就开始了,如果我使用它两次的话。所以我试着把字符串随机化,就像每次我使用它的时候,我怎么做呢?
发布于 2017-05-17 14:31:38
那么,对于您的问题,为什么不使用rand.Intn()选择一个随机数和打印游戏,而不是让用户选择一个数字?
isArray := [10]string{"Paladins", "Overwatch", "CS:GO", "Tanki", "Left 4 Dead", "Rocket League", "Call Of Duty : AW", "Portal", "Star Citizen", "Star Wars : Battlefront"}
n := rand.Intn(9)
fmt.Printf("You Should Play : %s\n", isArray[n])但是,如果您想要为数组中的字符串洗牌,那么您可以这样做:
// Shuffle array in place
l := len(isArray)-1
for i := 0; i <=l; i++ {
n := rand.Intn(l)
// swap
x := isArray[i]
isArray[i] = isArray[n]
isArray[n] = x
}这应该是O(n),虽然我不确定Intn的复杂性。如果你真的想要花哨,你可以:
randomArray),其中包含isArray中的随机数和元素位置。isArray的元素,但由randomArray命令发布于 2017-09-08 10:24:13
package main
import (
"fmt"
"math/rand"
"time"
)
func shuffle(src []string) []string {
final := make([]string, len(src))
rand.Seed(time.Now().UTC().UnixNano())
perm := rand.Perm(len(src))
for i, v := range perm {
final[v] = src[i]
}
return final
}发布于 2018-12-09 18:53:33
package main
import (
"fmt"
"math/rand"
"time"
)
type list []string
func main() {
s := list{
"Tanki",
"Left 4 Dead",
"Rocket League",
"Call Of Duty : AW",
}
s.shuffle()
s.print()
}
func (l list) print() {
for i, v := range l {
fmt.Println(i, v)
}
}
func (l list) shuffle() list {
src := rand.NewSource(time.Now().UnixNano())
r := rand.New(src)
for i := range l {
n := r.Intn(len(l) - 1)
l[i], l[n] = l[n], l[i]
}
return l
}https://stackoverflow.com/questions/44026823
复制相似问题