所以我在 Go Lang 中對陣列進行排序時遇到問題,這是我的代碼:
func main() {
fmt.Print("Masukkan Jumlah Data yang akan dimasukkan: ")
var jumlahdata int
fmt.Scanln(&jumlahdata)
var DataDiagram = make([]int, jumlahdata)
fmt.Print("Masukkan data secara berurutan dengan spasi sebagai pemisah antar angka: ")
for i := 0; i < jumlahdata; i {
fmt.Scanf("%d", &DataDiagram[i])
}
fmt.Print("\n")
var max int = DataDiagram[0]
for _, value := range DataDiagram { // Menemukan nilai maximum
if value > max {
max = value
}
}
var mem int
Sorting(DataDiagram, jumlahdata, mem, max)
}
func Grafik(jumlahdata int, max int, DataDiagram []int) {
for i := max; i >= 1; i-- { // membuat Data Diagram
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], " ")
}
}
func Sorting(DataDiagram []int, jumlahdata int, mem 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;
}
}
}
}
我所期望的是這樣的: 我所期望的
但輸出另有說明,它給我錯誤:它給我錯誤
有人可以提供一些指導如何解決這個問題:) 我昨天剛學了 Go,它類似于 C,但一直給我索引超出范圍錯誤
uj5u.com熱心網友回復:
我了解您的任務是對int“陣列”(slice,用說得??好)進行排序,將您作業的每一步都顯示為圖表。因為你必須展示你的作品,所以你不能使用 go 的內置排序,例如sort.Ints(DataDiagram).
你的問題出在Sorting函式上。
第 1 步直接導致崩潰的問題是i最終迭代到一個大于 的上限索引的數字DataDiagram。我們在下面的注釋行中修復。
// Step 1: fix the iterator
func Sorting(DataDiagram []int, jumlahdata int, mem int, max int) {
for langkah := 0; langkah < (jumlahdata-1) ; langkah {
Grafik(jumlahdata, max, DataDiagram)
for i := 0; i < jumlahdata - 1; i { // Was: 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;
}
}
}
}
步驟 2代碼不再崩潰,但不能保證排序,因為它只通過輸入一次。我們需要繼續回圈直到不再發生交換。該問題已在下面修復。代碼現在在操場上產生預期的輸出。
// Step 2: loop until sorted
func Sorting(DataDiagram []int, jumlahdata int, mem int, max int) {
swapped := true
for swapped {
Grafik(jumlahdata, max, DataDiagram)
swapped = false
for i := 0; i < jumlahdata - 1; i {
if DataDiagram[i] > DataDiagram[i 1] {
mem := DataDiagram[i];
DataDiagram[i] = DataDiagram[i 1]
DataDiagram[i 1] = mem;
swapped = true
}
}
}
}
步驟 3上面的代碼作業正常,但也許可以使用一些整理。最終結果在操場上沒有改變。
// Step 3: make it prettier
func Sorting(data []int) {
max := data[0]
for _, value := range data { // Menemukan nilai maximum
if value > max {
max = value
}
}
swapped := true
for swapped {
Grafik(len(data), max, data)
swapped = false
for i := 0; i < len(data)-1; i {
if data[i] > data[i 1] {
data[i], data[i 1] = data[i 1], data[i]
swapped = true
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339114.html
下一篇:JS:從物件陣列中提取資料
