想要选择一个随机数,并且在所有数字都经过

时间:2016-02-08 04:18:30

标签: go

我想从1-6中选择一个随机数,但是如果程序选择了1,我想确保在选择2-6之前不再使用它。我想这样做是为了有机会通过所有选项,而不是连续选择2次或者连续3次,因为只有6个选项。有什么想法吗?

//choose random number for recipe
rand.Seed(time.Now().UTC().UnixNano())
myrand := random(1, 6)
fmt.Println(myrand)

...

处理它的功能

//random number function
func random(min, max int) int {
    return rand.Intn(max-min) + min

}

我的程序中每次运行使用myrand的部分都在if语句中使用,并且与当天选择的配方相关联

//choose random number for recipe
rand.Seed(time.Now().UTC().UnixNano())
myrand := random(1, 6)
fmt.Println(myrand)

//test below of random replacement
list := rand.Perm(6)
for i, _ := range list {
    fmt.Printf("%d\n", list[i]+1)
}

//logic for recipe to choose
if myrand == 1 {
    fmt.Println(1)
    printRecipeOfTheDay(recipe1)
} else if myrand == 2 {
    fmt.Println(2)
    printRecipeOfTheDay(recipe2)
} else if myrand == 3 {
    fmt.Println(3)
    printRecipeOfTheDay(recipe3)
} else if myrand == 4 {
    fmt.Println(4)
}

}

我想知道我是不是做错了什么?我不确定如何在每次运行时使用该列表来生成一个新数字(myrand),程序将能够记住上一次运行时的最后一个数字(myrand)是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用rand.Perm(6)然后循环搜索结果。

例如,下面是以随机顺序打印数字1-6的代码,没有重复:

package main
import "fmt"
import "math/rand"

func main(){
    list := rand.Perm(6);
    for i, _ := range list {
        fmt.Printf("%d\n", list[i]+1);
    }
}

请注意,我们已经为所有内容添加了1,因为Perm(6)返回0-5而您想要1-6。在您使用了所有六个号码后,再次拨打rand.Perm(6)六个新号码。