我需要在輸入中創(chuàng)建一個(gè)具有自定義長(zhǎng)度的二維切片。切片是我的掃雷器的字段,所以長(zhǎng)度將是字段的維度。我需要切片是全局的,現(xiàn)在我將切片直接初始化為字段的常量維度,但是我正在實(shí)現(xiàn)難度,所以我需要字段是可變的。//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有沒有一種方法可以聲明變量,然后在函數(shù)中初始化它們,就像這樣(這種方式在 go 中是不可能的)://what i'd like to dovar dimX, dimY, bombs intvar number [][]int8 func main() { Scan(&dimX, &dimY, &bombs) number = [dimX][dimY] ...}我也嘗試過使用make,但它給了我一個(gè)不兼容的分配(不能使用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) } ...}我發(fā)現(xiàn)唯一可行的方法是通過 append() 函數(shù):將字段聲明為 [][] 或 [0][0] 并在用戶輸入后運(yùn)行一個(gè)函數(shù) append() x 次和 y 次到切片
1 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
問題中的第一段代碼使用數(shù)組數(shù)組。數(shù)組的長(zhǎng)度在編譯時(shí)設(shè)置。
像第二段代碼一樣使用切片。切片的長(zhǎng)度是動(dòng)態(tài)的。
如第三段代碼所示,使用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)
}
注意:?jiǎn)栴}中的代碼在引用元素時(shí)使用int8
和。uint8
這些是不同的類型。這個(gè)答案使用int8
.
- 1 回答
- 0 關(guān)注
- 114 瀏覽
添加回答
舉報(bào)
0/150
提交
取消