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

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

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

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

Q&A

解決済

4回答

4868閲覧

HashSetと乱数を生成し数を表示させたいです。

ssssa

総合スコア39

Java

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

0グッド

0クリップ

投稿2018/09/29 00:58

以下、内容です
1から10までの乱数を10回発生させ、その結果を表示し、そのあとに、そこで出力された文字の種類を表示するプログラムを作りたいです。数値はHashSetに登録し、1つの数が複数出現しても、一つとしてカウントするものとします。

以下が私が書いたコードです。

Java

1public static void main(String[] args) { 2 HashSet<String> hs = new HashSet<String>(); 3 int a = (int) (Math.random() * 10) + 1; 4 // ハッシュセットにデータを追加 5 hs.add("1"); 6 hs.add("2"); 7 hs.add("3"); 8 hs.add("4"); 9 hs.add("5"); 10 hs.add("6"); 11 hs.add("7"); 12 hs.add("8"); 13 hs.add("9"); 14 hs.add("10"); 15 // 追加した成分をすべて表示 16 System.out.println("乱数:"); 17 System.out.println("出現した数:"); 18 for (String s : hs) { 19 System.out.print(a); 20 System.out.print(s); 21 } 22 23 } 24 25} 26

乱数: 1 2 1 10 8 7 5 4 2 9
出現した数: 1 2 4 5 8 7 9 10
上記のようになるのですがなりません。
修正箇所をご指摘ご鞭撻賜りますよう、よろしくお願いします。

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

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

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

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

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

m.ts10806

2018/09/29 01:08

現在のコードではそのような出方にならないので調整された方が良いかと思いますし、そのような数字の感じにはならないと思いますが・・
m.ts10806

2018/09/29 01:09

また、「出力された文字の種類」とは何でしょうか?
ssssa

2018/10/08 13:14

わかりました。
guest

回答4

0

HashSetは重複する値が入らないので、

java

1Set<Integer> result = IntStream.range(0, count).mapToObj(i -> (int)(Math.random() *10) +1).collect(Collectors.toSet()); 2 3System.out.println(result);

だけで事足りるでしょう。

投稿2018/10/01 08:00

A-pZ

総合スコア12011

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

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

swordone

2018/10/01 08:07 編集

みんなrangeからmapToObjでやるんだけど、なんでgenerateからlimitを誰も出さないのだろう あと、「乱数」に相当する出力ができない
guest

0

ベストアンサー

java

1 2import java.util.ArrayList; 3import java.util.HashSet; 4 5public class memo_qa149091 { 6 7 public static void main(String[] args) { 8 HashSet<Integer> rndSet = new HashSet<Integer>(); 9 ArrayList<Integer> rndList = new ArrayList<Integer>(); 10 int maxCount = 10;//回数 11 for(int i=0;i<maxCount;i++) { 12 int rndNum = (int) (Math.random() * 10) + 1; 13 // データを追加 14 rndList.add(rndNum);//履歴 15 rndSet.add(rndNum);//種類 16 } 17 // すべて表示 18 System.out.print("乱数:"); 19 for (Integer i : rndList) { 20 System.out.printf("%s ", i); 21 } 22 System.out.println(); 23 24 System.out.print("種類:"); 25 for (Integer i : rndSet) { 26 System.out.printf("%s ", i); 27 } 28 System.out.println(); 29 } 30} 31 32//乱数:9 3 7 7 6 3 10 3 6 1 33//種類:1 3 6 7 9 10

投稿2018/09/29 06:36

opyon

総合スコア1009

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

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

ssssa

2018/10/08 13:25

丁寧でわかりやすいコードありがとうございます。 理解が深まりました。
ssssa

2018/10/08 13:26

ありがとうございます。理解が深まりました。
guest

0

後半を以下のようにするとわかりやすくなります。

java

1 2 String ra = ""; 3 String rs = ""; 4 for (String s : hs) { 5 ra +=a+""; 6 rs +=s+""; 7 } 8 // 追加した成分をすべて表示 9 System.out.println("乱数:"+ra); 10 System.out.println("出現した数:"+rs);

いずれにしても提示のような形にはなりませんよ。

結果:

乱数:7777777777 出現した数:12345678910

「乱数」に表示されている数字がランダム関数で取得された数字になるのみです。

投稿2018/09/29 01:13

m.ts10806

総合スコア80850

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

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

m.ts10806

2018/09/29 01:16

あ、sはstringだから+""はなくてもよかったですね。ちょっとした癖です。
guest

0

  1. 出した乱数を記録するものがない、というか乱数をどこでも記録していない
  2. 肝心のHashSetに1から10まで最初からすべて保存しているせいで、

何回やっても出現した数として1から10まですべて出現してしまう
0. 「乱数:」の後で数字を出力していない

投稿2018/09/29 01:04

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問