You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言数组排序代码报index out of range错误如何修复?

你出现索引越界的核心原因是Sorting函数内的内层循环边界计算错误:

  • Sorting函数中langkah初始值为0,原内层循环条件i < jumlahdata - (langkah-1) 当langkah=0时,计算结果为i < jumlahdata +1,i最大值会取到jumlahdata,此时访问DataDiagram[i+1]等于访问切片索引为jumlahdata的位置,而切片最大索引只有jumlahdata-1,直接触发越界。
  • 冒泡排序每一轮会将当前最大的未排序元素移动到末尾,因此内层循环的边界应该是i < jumlahdata - langkah - 1,既可以避免重复遍历已经排好序的尾部元素,也不会出现越界。

另外还有两处需要修正的细节:

  1. 代码中打印换行的写法fmt.Print(" ") 应该改为fmt.Print("\n"),Go中换行需要用转义字符\n
  2. 外层声明的mem变量没有实际作用,Sorting函数内部交换时又重新声明了局部mem变量,属于冗余代码可以直接删掉外层传参。

修复后的完整代码如下:

package main

import "fmt"

func main() {
	fmt.Print("请输入要录入的数据数量:")
	var jumlahdata int
	fmt.Scanln(&jumlahdata)
	var DataDiagram = make([]int, jumlahdata)
	fmt.Print("请依次输入数据,用空格分隔:")
	for i := 0; i < jumlahdata; i++ {
		fmt.Scanf("%d", &DataDiagram[i])
	}
	fmt.Print("\n")
	var max int = DataDiagram[0]
	for _, value := range DataDiagram { // 查找数组最大值
		if value > max {
			max = value
		}
	}
	Sorting(DataDiagram, jumlahdata, max)
}

func Grafik(jumlahdata int, max int, DataDiagram []int) {
	for i := max; i >= 1; i-- { // 生成排序过程柱状图
		for j := 0; j < jumlahdata; j++ {
			if DataDiagram[j] >= i {
				fmt.Print(" | ")
			} else {
				fmt.Print("   ")
			}
		}
		fmt.Print("\n")
	}
	for i := 0; i < jumlahdata; i++ {
		fmt.Print("---")
	}
	fmt.Print("\n")
	fmt.Print(" ")
	for i := 0; i < jumlahdata; i++ {
		fmt.Print(DataDiagram[i], "  ")
	}
	fmt.Print("\n\n")
}

func Sorting(DataDiagram []int, jumlahdata int, max int) {
	for langkah := 0; langkah < (jumlahdata - 1); langkah++ {
		Grafik(jumlahdata, max, DataDiagram)
		// 修正内层循环边界,避免索引越界
		for i := 0; i < jumlahdata - langkah - 1; i++ {
			if DataDiagram[i] > DataDiagram[i+1] {
				mem := DataDiagram[i]
				DataDiagram[i] = DataDiagram[i+1]
				DataDiagram[i+1] = mem
			}
		}
	}
	// 排序完成后打印最终结果
	Grafik(jumlahdata, max, DataDiagram)
}

内容的提问来源于stack exchange,提问作者Panji Tri Wahyudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:24:02