我目前正在编写一个程序,我想随机生成一个矩阵。
目前,我按照以下方式预先设置了值:
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
非常感谢任何帮助。
答案 0 :(得分:4)
直接答案是openblas-android-arm.jar
生成0到rand.Intn()
之间的随机整数,其中n
是此方法的参数。您得到的错误是编译器抱怨您尝试使用需要两个n
的函数初始化int
值并返回一个 - 您正在尝试将函数分配给{{ 1}}。所以正确的调用就像int
一样,会给你一个介于0到100之间的随机数。
但是,为什么这样呢?为什么不用随机数动态初始化数组:
int
答案 1 :(得分:0)
上面回答了你的问题,这是一个扩展,
虽然rand.Int(10)
总是给你1,因为它没有播种,
您可以添加此函数以在每次运行程序时获取随机值
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
}
}
}
此代码生成随机矩阵,低于100,同时您还可以使用标志用于将来的任何使用并概括值,
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
}
}
我们可以修改上面的printMatrix函数,循环遍历每个整数,然后使用fmt.Printf()
将其格式化,但是当我们不知道限制的长度时,这会使事情变得复杂......