亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

導致恐慌的原因:運行時錯誤:索引超出范圍 [4],長度為 4,即使數組已初始化為動態數組

導致恐慌的原因:運行時錯誤:索引超出范圍 [4],長度為 4,即使數組已初始化為動態數組

Go
小唯快跑啊 2022-07-25 11:09:34
我已經初始化了一個動態數組,但它顯示索引超出范圍。我也嘗試過給出固定長度,但它也顯示了同樣的錯誤。錯誤描述:恐慌:運行時錯誤:索引超出范圍 [4],長度為 4package mainimport "fmt"func missingNumber(nums []int) int {arrSum := 0arrLen := len(nums) + 1for i := 0; i < arrLen; i++ {arrSum += nums[i]}numSum := arrLen * (arrLen + 1) / 2missingNumber := numSum - arrSumreturn missingNumber}func main() {nums := []int{1, 3, 4, 5}result := missingNumber(nums)fmt.Println(result)}
查看完整描述

2 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

您應該更改arrLen := len(nums) + 1為arrLen := len(nums).


您的數組長度為 4。為此,索引為 0,1,2,3。但是當你試圖做 arrLen := len(nums) + 1. 現在的arrlen值是5。但你只有 4 個元素。并從您的循環中嘗試獲取數組中不存在的元素。這會給你一個運行時錯誤,它會恐慌。


這個對你有用:


package main

import "fmt"

func missingNumber(nums []int) int {

arrSum := 0

arrLen := len(nums)

for i := 0; i < arrLen; i++ {

arrSum += nums[i]

}

m := arrLen + 1

numSum := m * (m + 1) / 2

missingNumber := numSum - arrSum

return missingNumber

}

func main() {

nums := []int{1, 3, 4, 5}

result := missingNumber(nums)

fmt.Println(result)

}


查看完整回答
反對 回復 2022-07-25
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

這是您的程序中的更正,用于從自然數序列中查找單個缺失的數字。您正在索引數組 nums[len(nums) + 1] 超出數組的范圍。如果允許,這應該訪問隨機內存并讀取任何合法的垃圾值,您甚至不會知道如此難以發現的錯誤。好消息是 Go 正在檢查您是否只訪問數組中的那些元素,而不是超出這些元素。在 Go 規范中閱讀此內容


package main


import "fmt"


func missingNumber(nums []int) int {

    arrSum := 0

    arrLen := len(nums)

    for i := 0; i < arrLen; i++ {

        arrSum += nums[i]

    }

    //let n be the total natural number: which will be provided plus 1 missing

    n := arrLen + 1

    numSum := n * (n + 1) / 2

    missingNumber := numSum - arrSum

    return missingNumber

}

func main() {

    nums := []int{1, 3, 4, 5}

    result := missingNumber(nums)

    fmt.Println(result)

}

或者,您可以使用范圍循環來確保安全or _, i := range nums { ...:


package main


import "fmt"


func missingNumber(nums []int) int {

    arrSum := 0

    arrLen := len(nums)


    for _, i := range nums {

        arrSum += i

    }

    //let n be the total natural number; which will be provided plus 1 missing

    n := arrLen + 1

    numSum := n * (n + 1) / 2

    missingNumber := numSum - arrSum

    return missingNumber

}

func main() {

    nums := []int{1, 3, 4, 5}

    result := missingNumber(nums)

    fmt.Println(result)

}


查看完整回答
反對 回復 2022-07-25
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號