为了账号安全,请及时绑定邮箱和手机立即绑定

创建一个全局二维切片,长度为输入

创建一个全局二维切片,长度为输入

Go
慕丝7291255 2022-10-10 15:43:36
我需要在输入中创建一个具有自定义长度的二维切片。切片是我的扫雷器的字段,所以长度将是字段的维度。我需要切片是全局的,现在我将切片直接初始化为字段的常量维度,但是我正在实现难度,所以我需要字段是可变的。//my code right nowconst dimX int = 16            //X field dimensionconst dimY int = 16            //Y field dimensionvar bombs int = 40             //number of minesvar number [dimX][dimY]int8    //number contained in the cell, 0 if empty, -1 if minevar isOpen [dimX][dimY]bool    //if the cell is visible to the uservar isFlagged [dimX][dimY]bool //if the cell is marked as a bomb有没有一种方法可以声明变量,然后在函数中初始化它们,就像这样(这种方式在 go 中是不可能的)://what i'd like to dovar dimX, dimY, bombs intvar number [][]int8    func main() {   Scan(&dimX, &dimY, &bombs)   number = [dimX][dimY]   ...}我也尝试过使用make,但它给了我一个不兼容的分配(不能使用make([][]uint8,dimX)([][]uint8类型的值)作为[16][16]int8):func main() {   Scan(&dimX, &dimY, &bombs)   number = make([][]uint8, dimX)   for i := range number {      number[i] = make([]uint8, dimY)   }   ...}我发现唯一可行的方法是通过 append() 函数:将字段声明为 [][] 或 [0][0] 并在用户输入后运行一个函数 append() x 次和 y 次到切片
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

问题中的第一段代码使用数组数组。数组的长度在编译时设置。

像第二段代码一样使用切片。切片的长度是动态的。

如第三段代码所示,使用make分配切片。

var dimX, dimY, bombs int

var number [][]int8  // empty [] is a slice.


fmt.Scan(&dimX, &dimY, &bombs)

number = make([][]int8, dimX)

for i := range number {

    number[i] = make([]int8, dimY)

}

注意:问题中的代码在引用元素时使用int8和。uint8这些是不同的类型。这个答案使用int8.

在操场上运行示例


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信