我們的項目是使用 Go 制作一款實用的剪刀石頭布游戲。我認為這是一個很好的地方,可以就我可能犯的一些明顯錯誤尋求一些指導。我有幾個問題。無論用戶輸入什么,程序都會說我總是輸入“rock”。無論我輸入什么,程序總是告訴我這是一個“平局”所以對我來說很明顯我的 if/else 語句有問題,但我不確定它在哪里以及到底是什么。我也知道我的PlayerPlay功能很丑陋,但由于某種原因,當我最初在那里顯示我的顯示菜單時,它會繼續循環回到我的菜單,而不繼續執行程序的其余部分。package mainimport ( "fmt" "math/rand" "time")func ComputerPlay() int { return rand.Intn(2) + 1}func PlayerPlay(play int) int { fmt.Scanln(&play) return play}func PrintPlay(playerName string, play int) { fmt.Printf("%s picked ", playerName) if play == 0 { fmt.Printf("rock\n") } else if play == 1 { fmt.Printf("paper\n") } else if play == 2 { fmt.Printf("scissors\n") } fmt.Printf("Computer has chose ") switch ComputerPlay() { case 0: fmt.Println("rock\n") case 1: fmt.Println("paper\n") case 2: fmt.Println("scissors\n")}}func ShowResult(computerPlay int, humanPlay int){ var play int computerPlay = ComputerPlay() humanPlay = PlayerPlay(play) if humanPlay == 0 && humanPlay == 0 { fmt.Printf("It's a tie\n") } else if humanPlay == 0 && computerPlay == 1 { fmt.Printf(" Rock loses to paper\n") } else if humanPlay == 0 && computerPlay == 2 { fmt.Printf("Rock beats scissors\n") } else if humanPlay == 1 && computerPlay == 0 { fmt.Printf(" Paper beats rock\n") } else if humanPlay == 1 && computerPlay == 1 { fmt.Printf("It's a tie!\n") } else if humanPlay == 1 && computerPlay == 2 { fmt.Printf("Paper loses to scissors\n") } else if humanPlay == 2 && computerPlay == 0 { fmt.Printf("Scissors loses to rock\n") } else if humanPlay == 2 && computerPlay == 1 { fmt.Printf(" Scissors beats paper\n") } else if humanPlay == 2 && computerPlay == 2 { fmt.Printf(" It's a tie!\n") }}
1 回答
躍然一笑
TA貢獻1826條經驗 獲得超6個贊
問題是您在 PlayerPlay 函數中使用按值參數傳遞而不是按引用參數傳遞。
golang 中的函數始終按值傳遞(“原始”或指針)。按值傳遞的參數是不可變的。它將在內存中分配新的空間,與
var play.在您的
PlayerPlay()函數中,fmt.Scanln(&play)嘗試讀取和復制新分配的空間的值并成功完成,但引用錯誤(不在您的var play)。因此,該
var play變量將保持默認值不變(對于 int 為 0)。而你最終總是會做出選擇。
您需要做的是將PlayerPlay()函數更改為接受引用類型,并用 的引用填充它,var play以便fmt.Scanln()可以改變var play.
例如。
func PlayerPlay(play *int) {
fmt.Scanln(play)
}像這樣使用它們,
var play int PlayerPlay(&play)
請注意,該&符號用于獲取值的引用(指針)。
- 1 回答
- 0 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消
