第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何排除溢出矩陣的坐標(biāo)

如何排除溢出矩陣的坐標(biāo)

Go
拉莫斯之舞 2022-12-13 16:05:05
任務(wù)是編寫(xiě)一個(gè)函數(shù),返回一個(gè)元素的所有鄰居。對(duì)角線(xiàn)元素不被視為鄰居。一般來(lái)說(shuō),問(wèn)題是解決了,但是如果元素落在矩陣之外,編譯器會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤:index out of range [-1]?,F(xiàn)在我正在考慮制定一個(gè)排除矩陣外數(shù)據(jù)的條件。你能告訴我這樣的情況會(huì)是什么樣子嗎?我已經(jīng)嘗試過(guò)類(lèi)似的方法:if element = -1, then remove element from response. 但它不起作用。package mainimport "fmt"func Input(y, x int) []int {    matrix := [][]int{        []int{0, 2, 3},        []int{2, 3, 1},        []int{8, 7, 4},        []int{3, 2, 1},    }    k := []int{matrix[y+1][x], matrix[y-1][x], matrix[y][x+1], matrix[y][x-1]}    for _, z := range k {        if z == -1 { //error            return append(k[z:], k[:z-1]...)        }    }    return k}func main() {    fmt.Println(Input(0, 0))}
查看完整描述

1 回答

?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

x鄰居的 和索引都y可能超出范圍,不僅是在 時(shí)-1,而且當(dāng)它們 >= 您用它們索引的切片的長(zhǎng)度時(shí)。


所以基本上有 4 個(gè)鄰居:


(y-1,x), (y+1, x), (y,x-1), (y,x+1)

你必須檢查所有越界的情況。您的恐慌發(fā)生在線(xiàn)路上k := ...,而不是在for循環(huán)內(nèi)。同樣在循環(huán)的早期返回將不會(huì)處理所有元素,這for從根本上就是錯(cuò)誤的。


所以基本上這是你可以做到的:


var result []int


if y > 0 {

    result = append(result, matrix[y-1][x])

}

if y < len(matrix)-1 {

    result = append(result, matrix[y+1][x])

}

if x > 0 {

    result = append(result, matrix[y][x-1])

}

if x < len(matrix[y])-1 {

    result = append(result, matrix[y][x+1])

}


return result

這將輸出(在Go Playground上嘗試):


[2 2]

注意,如果xory已經(jīng)無(wú)效,上面的代碼仍然會(huì) panic。如果你想防止它,你還必須驗(yàn)證xand y,例如:


var result []int

if y < 0 || y >= len(matrix) || x < 0 || x >= len(matrix[y]) {

    return result

}

另一種方法是在另一個(gè)切片中列出鄰居的deltaY和索引:deltaX


var neighbors = [][]int{

    {-1, 0},

    {1, 0},

    {0, -1},

    {0, 1},

}

您可以使用循環(huán)遍歷neighbors,然后您可以在一個(gè)地方檢查索引:


var result []int

for _, neighbor := range neighbors {

    iy, ix := y+neighbor[0], x+neighbor[1]

    if iy < 0 || iy >= len(matrix) || ix < 0 || ix >= len(matrix[iy]) {

        continue

    }

    result = append(result, matrix[iy][ix])

}


return result

在Go Playground試試這個(gè)。


請(qǐng)注意,如果您在矩陣外部指定索引,并且該元素的鄰居落在矩陣內(nèi),則第二個(gè)解決方案也會(huì)返回鄰居。y=-1例如,使用, 作為輸入,將返回x=0鄰居 (y+1,x) 。0


查看完整回答
反對(duì) 回復(fù) 2022-12-13
  • 1 回答
  • 0 關(guān)注
  • 71 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)