質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

629閲覧

golang Arrayのnil判定について

lop000p

総合スコア29

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2022/11/20 07:53

package main import ( "bufio" "fmt" "math/rand" "os" "strconv" ) var sc = bufio.NewScanner(os.Stdin) func main() { fmt.Println("MatchStickDiceGame") fmt.Println("11本のマッチ棒を一番最初に取得したプレイヤーの勝ちです") fmt.Println(`プレイヤーは何人ですか?`) var totalPlayer int if sc.Scan() { var x string x = sc.Text() totalPlayer, _ = strconv.Atoi(x) } if totalPlayer < 4 { fmt.Println(totalPlayer, `人で対戦します`) } else { fmt.Println(`3人以上では対戦できません`) } var playerArrayList []int playerArrayList = startPlayer(totalPlayer) for i := 0; i < totalPlayer; i++ { fmt.Println("プレイヤー", (i + 1), playerArrayList[i]) } } func startPlayer(totalPlayer int) []int { //順番を決める playerArray := make([]int, totalPlayer) for i := 0; i < totalPlayer; i++ { num := rand.Intn(totalPlayer + 1) playerArray[i] = num } fmt.Println(playerArray) return playerArray }

実行結果
11本のマッチ棒を一番最初に取得したプレイヤーの勝ちです
プレイヤーは何人ですか?
3
3 人で対戦します
[1 3 3]
プレイヤー 1 1
プレイヤー 2 3
プレイヤー 3 3

実現したいこと
プレイヤーのゲームを行う順位を決めたいです。
rand.Intnでランダムに数字を出すと同じ数字が出てしまい順位がかぶってしまいます。
プレイヤーが対戦する順位を決めたい場合、どのようなコードにしたらいいか教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2022/11/20 15:07

タイトルと質問の内容がミスマッチなのでタイトルを合わせるとよいかもしれません。
guest

回答1

0

ベストアンサー

こういう時は毎回ランダム値を拾うのではなく、カードのシャッフルの様な考え方を使うとよいです。

totalPlayer数の連番スライスを作っておき、その内容をシャッフルします。

https://go.dev/play/p/meMkqoqZCw_M

go

1package main 2 3import ( 4 "fmt" 5 "math/rand" 6) 7 8func startPlayer(totalPlayer int) []int { 9 playerArray := []int{1, 2, 3, 4, 5, 6, 7, 8}[:totalPlayer] 10 rand.Shuffle(len(playerArray), func(i, j int) { 11 playerArray[i], playerArray[j] = playerArray[j], playerArray[i] 12 }) 13 return playerArray 14} 15 16func main() { 17 fmt.Println(startPlayer(3)) 18 fmt.Println(startPlayer(8)) 19}

出力例:

[1 3 2] [2 8 5 1 7 3 4 6]

投稿2022/11/20 15:05

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lop000p

2022/11/23 03:45

実現したかったことが見事にできました😢 教えていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問