2017-05-22 3 views
1

私は現在プログラムを書いており、ランダムに行列を生成したい。Golangで無作為に行列を生成する

は現在、私は次のように値を事前に設定するよ:

m1 := [3][3]int{ 
    [3]int{1, 1, 1}, 
    [3]int{4, 1, 7}, 
    [3]int{1, 65, 1}, 
} 

私は値がランダムに1-100の範囲で生成されるように、入力されたいが。

import "math/rand" 

私は上記のライブラリをインポートして利用しようとしています。

私はこの作業をしようとしましたが、進歩を遂げることはできません。

m1 := [3][3]int{ 
    [3]int{rand.Intn, 1, 1}, 
    [3]int{4, 1, 7}, 
    [3]int{1, 65, 1}, 
} 

私は上記の解決方法で最初の数字をランダムにすることを試みましたが、次のエラーが発生しました。

cannot use rand.Intn (type func(int) int) as type int in array or slice literal 

大変助かりました。

答えて

3

rand.Intn()は、0とnの間のランダムな整数を生成するという直接的な答えです。ここで、nはこのメソッドのパラメータです。あなたが得ているエラーは、intの値を2つのintが必要な関数で初期化しようとしていると不平を言うコンパイラです。intに関数を割り当てようとしています。したがって、正しい呼び出しはrand.Intn(100)のようなものになり、0〜100の間の乱数が与えられます。

ただし、このようにするのはなぜですか?いつもあなたに1を与える

rand.Int(10)ものの、それはシードのないよう、 、

は、あなたの質問への答えは上記の回答され
m1 := [3][3]int{} 
for i:=0; i<3; i++ { 
    for j:=0; j<3; j++ { 
     m1[i][j] = rand.Int() 
    } 
} 
0

が、これは拡張機能です:なぜ動的に乱数を使って配列を初期化あなたはまた、将来の使用のいずれかの種類のフラグを使用してVALUを一般化することができますしながら、このコードは、100の下に、ランダム行列を生成

package main 

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

func init() { 
    rand.Seed(time.Now().UnixNano()) 
//we are seeding the rand variable with present time 
//so that we would get different output each time 
} 

func main() { 
    randMatrix := make([][]int, 3) 
// we have created a slice with length 3 
//which can hold type []int, these can be of different length 
    for i := 0; i < 3; i++ { 
     randMatrix[i] = make([]int, 3) 
// we are creating a slice which can hold type int 
    } 
    generate(randMatrix) 
    fmt.Println(randMatrix) 
} 

func generate(randMatrix [][]int) { 
    for i, innerArray := range randMatrix { 
     for j := range innerArray { 
      randMatrix[i][j] = rand.Intn(100) 
//looping over each element of array and assigning it a random variable 
     } 
    } 
} 

、ランダムな値にあなたがあなたのプログラムを実行するたびに取得するには、この機能を追加することができますES、

import "flag" 

var outerDim, innerDim, limit *int 

func main() { 
    outerDim = flag.Int("outerDim", 3, "Outer dimension of the matrix") 
    innerDim = flag.Int("innerDim", 3, "inner dimenstion of the matrix") 
    limit = flag.Int("limit", 100, "matrix values are limited specified value") 
    flag.Parse() 
    randMatrix := make([][]int, *outerDim) 
    for i := 0; i < *outerDim; i++ { 
     randMatrix[i] = make([]int, *innerDim) 
    } 
    generate(randMatrix) 
    printMatrix(randMatrix) 
} 

func generate(randMatrix [][]int) { 
    for i, innerArray := range randMatrix { 
     for j := range innerArray { 
      randMatrix[i][j] = rand.Intn(*limit) 
     } 
    } 
} 

func printMatrix(randMatrix [][]int) { 
//looping over 2D slice and extracting 1D slice to val 
    for _, val := range randMatrix { 
     fmt.Println(val)// printing each slice 
    } 
} 

私たちは、それぞれの整数をループして、fmt.Printf()を使用しても、それをフォーマットすることによって、上記printMatrix機能を変更することができますが、我々は限界の長さを知られていないときには、物事が複雑になります...

関連する問題