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

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

節(jié)點(diǎn)結(jié)構(gòu)切片中的未定義屬性

節(jié)點(diǎn)結(jié)構(gòu)切片中的未定義屬性

Go
人到中年有點(diǎn)甜 2021-06-04 10:03:02
我正在嘗試通過實(shí)現(xiàn)一個(gè)隨機(jī)圖來學(xué)習(xí) go。我在 n.value undefined(int 類型沒有字段或方法值)和 n.neigbours undefined(int 類型沒有字段或方法 neigbours)上收到錯誤。我無法理解編譯錯誤,因?yàn)槲以?g.nodes = make([]node, g.nodesnr) 中創(chuàng)建了一個(gè)新的 nodenr 大小的空節(jié)點(diǎn)切片。問題是什么?package mainimport (    "fmt"//"math/rand")type node struct {    value     int    neigbours []int}type edge struct {    source int    sink   int}type graph struct {    nodesnr, edgesnr int    nodes            []node    edges            chan edge}func main() {    randomGraph()}func input(tname string) (number int) {    fmt.Println("input a number of " + tname)    fmt.Scan(&number)    return}func randomGraph() (g graph) {    g = graph{nodesnr: input("nodes"), edgesnr: input("edges")}    g.addNodes()    for i := 0; i < g.nodesnr; i++ {        fmt.Println(g.nodes[i].value)    }    //g.addEdges()    return}func (g *graph) addNodes() {    g.nodes = make([]node, g.nodesnr)    for n := range g.nodes {        n.value = 2        n.neigbours = nil        return    }}func (g *graph) addEdges() {    g.edges = make(chan edge)    for i := 0; i < g.edgesnr; i++ {        //g.newEdge()        return    }}/* func (g* graph) newEdge(){e := new(edge)e.source, e.sink = rand.Intn(g.nodesnr), rand.Intn(g.nodesnr)g.edges <-e*//g.addEdge() }*/func (g *graph) edgeCheck(ep *edge) string {    if ep.source == ep.sink {        return "self"    }    //if(g.neigbourCheck(g.nodes[ep.source].neigbours, ep.sink) OR    g.neigbourCheck(g.nodes[ep.sink].neigbours, ep.source){    //  return "present"    return "empty"}func (g *graph) neigbourCheck(neigbours []node, node int) bool {    for neigbour := range neigbours {        if node == neigbour {            return true        }    }    return false}
查看完整描述

1 回答

?
收到一只叮咚

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

您的錯誤在于第 47 行


for n := range g.nodes 

當(dāng)?shù)粋€(gè)切片時(shí),當(dāng)只使用一個(gè)值時(shí),該值 ( n) 將被設(shè)置為類型的索引int。您需要做的是將行更改為:


for _, n := range g.nodes 

這意味著您丟棄索引但將值放入n。


編輯


n 將是該值的副本,這意味著對 n 所做的任何更改都不會影響切片中的節(jié)點(diǎn)。要編輯切片中的節(jié)點(diǎn),您實(shí)際上應(yīng)該獲取索引而不是值:


for i := range g.nodes {

    g.nodes[i].value = 2

    g.nodes[i].neigbours = nil

    return

}


查看完整回答
反對 回復(fù) 2021-06-28
  • 1 回答
  • 0 關(guān)注
  • 214 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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