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

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

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

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

Q&A

2回答

4834閲覧

Random 任意の数字を除外したい

StarDastBreaker

総合スコア4

Java

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

0グッド

0クリップ

投稿2019/08/29 12:14

編集2019/08/29 13:38

前提・実現したいこと

java言語で1~100までの乱数を5回連続生成し、10回連続表示するプログラムを作成しています。
*イメージ
11,12,13,14,15,16,17,18,19,20
97,48,59,72,75,58,64,30,50,43,
27,90,86,76,19,39,47,83,54,46,
29,23,14,71,94,15,53,28,65,74,
51,18,10,93,22,100,45,62,57,95,
56,24,63,49,80,77,73,55,41,68,

条件として「,」で区切った数字を好きなだけ乱数から除外し、「‐」で囲んだ範囲の数字を削除(例:15-20で15~20を乱数から削除する)する必要があります。

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

カンマ区切りの数字除外が上手くいきません。
「コンソールの数字を読み取りリストに追加 」(コメント)の処理のところでリストで追加されるのが、コンソールの数字ではなくインデックスの番号になってしまいます。
また、‐区切りでどんな処理を書いたらいいのかわかりません。

該当のソースコード

ArrayList list = new ArrayList(); // for (int i = 1; i <= 100; i++) { // list.add(i); // } Scanner scan = new Scanner(System.in); String num = scan.next(); String kanma = ","; String removerRange = "-"; String[] split = num.split(",", -1); if (num.contains(kanma)) {

// コンソールの数字を読み取りリストに追加
for (int i = 0; i < split.length; i++) {
//
list.add(i);
}
}
for (int i = 0; i < 5; i++) {
// System.out.print((i + 1) + " ");
for (int j = 0; j < 10; j++) {
// 乱数生成
Random rnd = new Random();
int rand = rnd.nextInt(100) + 1;

if (!list.contains(rand)) { // 今までに出たことが無い数のとき // リストに追加 list.add(rand); // 出力 System.out.print(rand + ","); } else { // 今までに出たことがある数のとき // もう一度やりなおし j--; } } System.out.println(); } } }
ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

jimbe

2019/08/29 12:58

「コンソーール」は「コンソール」のことでしょうか. 細かいことですが, 名前1つの間違えで大変なことになることがあるのが開発です.
tetutetu

2019/08/30 01:09

学習のためなら尚更だと思うんですが Listの宣言の仕方を直すべきでは… list.add(1); list.add("2"); list.add(true); list.add(12.345); list.add(new String[0]); list.add(new ArrayList<String>()); list.add(new HashMap<String,List<String>>()); //何らかのクラスのインスタンス list.add(new Hoge()); これ全部入りますよ…
guest

回答2

0

参考にはなるが、そのまま使うと常識を疑うひどいソース

数列の範囲 1 から10 ( 1,2,3,4,5,6,7,8,9,10 )
対象外の数値 3および6から9( 3,6,7,8,9 )
数値の個数 5個
実行回数 5回

数列のベースを毎回作ってるなど性能的には最悪ですがw
課題の答えとして出したら0点だろうな。

public static void main(String[] args) { Random r = new Random(); IntStream.rangeClosed(1, 5).forEach(a -> { List<String> copyList = IntStream.rangeClosed(1, 10).mapToObj(String::valueOf).collect(Collectors.toList()); Arrays.stream("3,6-9".split(",")).forEach(i -> { IntStream.rangeClosed(Integer.valueOf(i.split("-")[0]),Integer.valueOf(i.split("-")[i.contains("-") ? 1 : 0])).mapToObj(String::valueOf).forEach(copyList::remove); }); IntStream.rangeClosed(1, 5).forEach(b -> { System.out.printf("%3s", copyList.remove(r.nextInt(copyList.size()))); }); System.out.println(); }); }

投稿2019/08/29 14:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

リストで追加されるのが, ~ インデックスの番号になってしまいます

list.add(i);

「なってしまう」もなにも, インデックスの番号を入れています.

‐区切りでどんな処理を書いたらいいのか

"-" 指定の場合はその間の数値をループで生成して list に add すれば良いかと思います.

投稿2019/08/29 13:06

編集2019/08/29 13:08
jimbe

総合スコア12659

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

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

StarDastBreaker

2019/08/29 13:42 編集

ご回答ありがとうございます。 下記のように訂正したのですが、除外がうまくいきません。よろしければ添削お願いします。 if (num.contains(kanma)) { list.add(split); } // } for (int i = 0; i < 5; i++) { // System.out.print((i + 1) + " "); for (int j = 0; j < 10; j++) { // 乱数生成 Random rnd = new Random(); int rand = rnd.nextInt(100) + 1; if (!list.contains(rand)&&!list.contains(split)) { // 今までに出たことが無い数のとき // リストに追加 list.add(rand); // 出力 System.out.print(rand + ","); } else { // 今までに出たことがある数のとき // もう一度やりなおし j--; } } System.out.println(); } } }
jimbe

2019/08/29 16:47

勘で修正しても思った動作になることは稀かと思います. > list.add(split); list には何が入るべきでしょうか. split は何でしょうか. > if (!list.contains(rand)&&!list.contains(split)) { この if 文はどのような目的でどのような時に true になるでしょうか. > よろしければ添削お願いします。 念の為申し上げますが, こちらは添削する所ではありません. また, コードには間違いはあっても正解はありません. ご質問の内容から見て, 恐らく仕事では無く学習の課題かと思います. だとすればご自身で内容を理解して動作させる必要があるでしょう. 各変数に何が設定され, 何にどう使うのか, どう変化させるのかを表現したものがコードです. 一つ々々確認しながら, 注意深く修正してみては如何でしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問