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

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

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

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

Q&A

解決済

golang Arrayのnil判定について

lop000p
lop000p

総合スコア24

Go

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

1回答

0グッド

0クリップ

344閲覧

投稿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でランダムに数字を出すと同じ数字が出てしまい順位がかぶってしまいます。
プレイヤーが対戦する順位を決めたい場合、どのようなコードにしたらいいか教えていただきたいです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

nobonobo

2022/11/20 15:07

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

回答1

1

ベストアンサー

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

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

総合スコア3261

lop000p👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

lop000p

2022/11/23 03:45

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Go

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