2015-05-14 4 views
4

Я полный noob относительно Go.Go Случайное число всегда возвращается 168

Я пытаюсь сделать произвольную функцию, которая возвращает два случайных числа, добавленные вместе.

Я наклеил свой код ниже и не могу понять, почему он всегда возвращает 168!

package main 

import(
    "fmt" 
    "math/rand" 
) 

func add(x int, y int) int{ 
    return x + y 
} 

var a int = rand.Intn(100) 
var b int = rand.Intn(100) 

func main() { 
    fmt.Println(add(a, b)) 
} 
+3

В чем проблема? 168 мне кажется довольно случайным. – Gabe

ответ

10

Вы должны указать количество семян, чтобы получить разные цифры. Она описана в documentation:

функции верхнего уровня, такие как Float64 и Int, использовать по умолчанию общий источник, который производит детерминированную последовательность значений каждый раз, когда программа запускается. Используйте функцию Seed для инициализации источника по умолчанию , если для каждого прогона требуется другое поведение.

И некоторые ссылки о Seed

Seed использует прилагаемое начальное значение для инициализации источника по умолчанию детерминированного состояние. Если семя не вызывается, генератор ведет себя как , если посеять семена (1).

И вы можете увидеть пример в ходу cookbook:

rand.Seed(time.Now().Unix())

Так подведению, вы будете иметь что-то вроде этого:

package main 

import(
    "fmt" 
    "math/rand" 
    "time" 
) 

func add(x int, y int) int{ 
    return x + y 
} 


func main() { 
    rand.Seed(time.Now().Unix()) 
    var a int = rand.Intn(100) 
    var b int = rand.Intn(100) 
    fmt.Println(add(a, b)) 
} 
Смежные вопросы