Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 即使检查了正确的条件,也会引发恐慌:运行时错误:索引超出范围[3],长度为3_Arrays_Go_Slice_Panic - Fatal编程技术网

Arrays 即使检查了正确的条件,也会引发恐慌:运行时错误:索引超出范围[3],长度为3

Arrays 即使检查了正确的条件,也会引发恐慌:运行时错误:索引超出范围[3],长度为3,arrays,go,slice,panic,Arrays,Go,Slice,Panic,在执行以下操作时,重要捕获 对于c:=0;c

在执行以下操作时,重要捕获 对于c:=0;c 它给出的结果是:0,3,4,6,30

任何人都可以查看此代码,这将是一个很大的帮助。
提前感谢。

您的算法有问题,您假设阵列分布均匀

您需要检查是否已经从一个数组中添加了所有条目,然后添加第二个数组的其余条目

package main

import "fmt"

func mergeSortedArray(arr1 []int, arr2 []int) []int {

    var mergedArr []int
    lengthArr := len(arr1) + len(arr2)
    fmt.Println(lengthArr)

    i := 0
    j := 0
    //Check input
    if len(arr1) == 0 {
        return arr2
    }

    if len(arr2) == 0 {
        return arr1
    }

    for c := 0; c < lengthArr; c++ {
        if arr1[i] >= arr2[j] {
            mergedArr = append(mergedArr, arr2[j])
            j++
        } else {
            mergedArr = append(mergedArr, arr1[i])
            i++
        }
    }
    return mergedArr

}

func main() {

    arr1 := []int{0, 3, 31}
    arr2 := []int{4, 6, 30}

    m := mergeSortedArray(arr1, arr2)
    fmt.Println(m)
    //Exp output : 0,3,4,6,30,31
}

您有长度为3的数组&您在等于6的lenarr+lenarr2上循环,这证明了错误的合理性。这些数组只有3个元素,您正在尝试访问第四个元素。你会惊慌失措。你的问题是什么?非常感谢,我知道了。
func mergeSortedArray(arr1 []int, arr2 []int) []int {
    var mergedArr []int
    lengthArr := len(arr1) + len(arr2)
    fmt.Println(lengthArr)

    i := 0
    j := 0
    //Check input
    if len(arr1) == 0 {
        return arr2
    }

    if len(arr2) == 0 {
        return arr1
    }

    for c := 0; c < lengthArr; c++ {
        if i >= len(arr1) {
            mergedArr = append(mergedArr, arr2[j:len(arr2)]...)
            break
        } else if j >= len(arr2) {
            mergedArr = append(mergedArr, arr1[i:len(arr1)]...)
            break
        } else if arr1[i] >= arr2[j] {
            mergedArr = append(mergedArr, arr2[j])
            j++
        } else {
            mergedArr = append(mergedArr, arr1[i])
            i++
        }
    }
    return mergedArr

}