2016-02-08 1 views
1

Я ищу, чтобы выбрать случайное число от 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 от каждого запуска используется в случае заявления и привязывают к рецепту, который будет выбран в течение дня

//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), когда оно запускалось в предыдущее время?

ответ

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) для шести новых номеров.

+0

Интересно, есть ли пример, на который я могу следовать? – Tbalz

+1

[Здесь] (http://play.golang.org/p/ZIglCQ11AE) - это небольшой пример использования закрытий. – Aedolon

+0

Знаете ли вы, как я могу выбрать одно конкретное значение из списка и прочитать его в переменной, подлежащей обработке? Например, можно ли положить значение 1 в переменную с именем «value1», а затем запустить оператор if else в «value1»? – Tbalz