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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1842閲覧

1〜13の数字をシャッフルさせるプログラム。ただし、重複させない。

hona_tan

総合スコア45

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/28 09:32

実現したいこと

1〜13の数字をシャッフルさせ、重複せずに実行させたい。

発生している問題・エラーメッセージ

同じ数字が出てしまいます。

$ Javac Shuffle.java $ java Shuffle 13 6 5 6 7 13 12 8 6 4 3 3

該当のソースコード

public class Shuffle { public static void main(String[] args) { int[] card = {1,2,3,4,5,6,7,8,9,10,11,12,13}; for (int i=1; i<card.length; i=i+1) { int x = (int)(Math.random() *13) + 1; System.out.print(x+ " "); } System.out.println(); } }

試したこと

ループ回数の配列と、乱数で発生した数字の配列を入れ替えてみたり、二重for文にしてみたりした。
書き方がおかしかったのか、同じ数字が出てしまった。

補足情報(FW/ツールのバージョンなど)

PC:Mac
エディタ:Atom

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

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

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

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

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

amiya

2020/07/28 09:35

配列を入れ換えてやった場合のコードを書くと問題点がわかるかもしれません。
momon-ga

2020/07/28 09:49

java list シャッフルで、検索するといろいろ出てきますが、配列を使うことが条件でしょうか?
hona_tan

2020/07/28 10:05

きちんと確認したらできました! ご指導ありがとうございました!
guest

回答3

0

フィッシャー・イェーツのシャッフルの改良版を利用。
出力のコードは入れていません。

java

1public class Shuffle { 2 public static void main(String[] args) { 3 int[] card = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 4 5 for (int i = card.length; i > 1; i--) { 6 int x = (int)(Math.random() * i); 7 int t = card[x]; 8 card[x] = card[i - 1]; 9 card[i - 1] = t; 10 } 11 } 12}

投稿2020/07/28 13:20

swordone

総合スコア20651

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

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

0

シャッフルするには、たとえば「用意済みの2つの値を交換する」処理の繰り返しを書けばいいので、

Java

1public class Shuffle { 2 public static void main(String[] args) { 3 int[] card = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; 4 5 for (int i = card.length - 1; i >= 1; i--) { 6 int j = (int) (Math.random() * i); 7 int tmp = card[j]; 8 card[j] = card[i]; 9 card[i] = tmp; 10 } 11 12 for (int i = 0; i < card.length; i++) { 13 System.out.print(card[i] + " "); 14 } 15 System.out.println(); 16 } 17}
C>java Shuffle 2 11 10 5 7 13 6 4 12 9 3 8 1 C>java Shuffle 11 6 1 9 8 3 5 12 7 13 10 2 4

投稿2020/07/28 13:02

編集2020/07/28 13:06
Daregada

総合スコア11990

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

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

0

自己解決

for ( int i=1; i<card.length; i=i+1) { card[i] = i; }

↑この部分を追加したらできました!

投稿2020/07/28 10:07

hona_tan

総合スコア45

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

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

momon-ga

2020/07/28 10:26

上記の回答は不完全な連番を設定するだけで、シャッフルが実現できると思えないのですが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問