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

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

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

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

解決済

乱数を格納した配列を昇順にして表示したい

tuka
tuka

総合スコア13

Java

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

2回答

0評価

1クリップ

365閲覧

投稿2022/06/20 09:14

編集2022/06/22 08:35

以下のようなコードを書いて実行したのですが、乱数がばらばらに表示してしまいます。配列に格納して昇順に出力したいのですが、どなたか解決方法教えてください。

該当コード

java

import java.util.Calendar; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Arrays; import java.util.Random; class ThreadLearnss extends Thread { public void run() { for (int i = 0; i < 30; i++) { } } } class mains { public static void main(String[] args) { for (int h = 0; h < 30; h++) { Thread[] th = new Thread[30]; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); Calendar calendar = Calendar.getInstance(); for (Thread s : th) { s.start(); int[] nums; for (int i = 0; i < 30; i++) { th[i] = new Thread(); calendar.setTime(date); nums = new Random().ints(30, 2, 11).toArray(); Date d1 = calendar.getTime(); calendar.add(Calendar.SECOND, nums[i]); Arrays.sort(nums); System.out.printf("%d %s %s %s %d %s %s\n", s.getId(), "start", sdf.format(date), "wait", nums[i], sdf.format(d1), "end"); } } for (Thread t : th) { try { t.join(); } catch (InterruptedException e) { System.out.println(e); } finally { System.out.printf("%s", "program end"); } } } } }

出力

java

15 start 08:25:53 wait 5 08:25:58 end 16 start 08:25:53 wait 3 08:25:56 end 17 start 08:25:53 wait 5 08:25:58 end 18 start 08:25:53 wait 9 08:26:02 end 19 start 08:25:53 wait 7 08:26:00 end 20 start 08:25:53 wait 8 08:26:01 end 21 start 08:25:53 wait 4 08:25:57 end 22 start 08:25:53 wait 7 08:26:00 end 23 start 08:25:53 wait 6 08:25:59 end 24 start 08:25:53 wait 2 08:25:55 end 25 start 08:25:53 wait 2 08:25:55 end 26 start 08:25:53 wait 4 08:25:57 end 27 start 08:25:53 wait 2 08:25:55 end 28 start 08:25:53 wait 7 08:26:00 end 29 start 08:25:53 wait 6 08:25:59 end 30 start 08:25:53 wait 7 08:26:00 end 31 start 08:25:53 wait 10 08:26:03 end 32 start 08:25:53 wait 9 08:26:02 end 33 start 08:25:53 wait 2 08:25:55 end 34 start 08:25:53 wait 6 08:25:59 end 35 start 08:25:53 wait 9 08:26:02 end 36 start 08:25:53 wait 7 08:26:00 end 37 start 08:25:53 wait 10 08:26:03 end 38 start 08:25:53 wait 7 08:26:00 end 39 start 08:25:53 wait 4 08:25:57 end 40 start 08:25:53 wait 8 08:26:01 end 41 start 08:25:53 wait 4 08:25:57 end 42 start 08:25:53 wait 9 08:26:02 end 43 start 08:25:53 wait 3 08:25:56 end 44 start 08:25:53 wait 8 08:26:01 end program end

試したこと

Arrays.sort(nums);とSystem.out.printfをfor文の外に出した。当然ですがSystem.out.printfのnums[i]がエラーになる

追記

java

import java.util.Calendar; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Arrays; import java.util.Random; class mains { public static void main(String[] args) { Thread[] th = new Thread[30]; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); Calendar calendar = Calendar.getInstance(); int[] nums = new Random().ints(30, 2, 11).toArray(); Arrays.sort(nums); for (int i = 0; i < 30; i++) { th[i] = new Thread(); th[i].start(); calendar.setTime(date); Date d1 = calendar.getTime(); calendar.add(Calendar.SECOND, nums[i]); System.out.printf("%d %s %s %s %d %s %s\n", th[i].getId(), "start", sdf.format(date), "wait", nums[i], sdf.format(d1), "end"); } for (Thread t : th) { try { t.join(); } catch (InterruptedException e) { System.out.println(e); } finally { System.out.printf("%s", "program end"); } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2022/06/20 09:31

これはどういう意図のコードなんでしょうか。なぜ Thread を使っているのでしょうか。日本語で説明していただけませんか? 「Arrays.sort(nums);」は 27,000 回実行されるように見えますが、これは意図どおりですか?
dodox86

2022/06/20 10:53

何となくコードを書いて動かないと嘆き、質問するのは止めましょう。やりたいこと、ご要望は分からなくもないですが、コードが意図不明です。
tuka

2022/06/20 14:22

すみません、説明不足でした。Threadを30個作って,各スレッドではスレッドのIDを取得,開始時刻を取得,乱数で2から10秒待ち,終了時刻を取得し,スレッドID,開始時刻,待ち秒数,終了時刻を表⽰させるプログラムを作ろうとしているのですが、プログラムの一部しか提示していなかったため、全て提示するように編集します。
dodox86

2022/06/20 16:49

乱数の配列のソート云々の前に、ThreadLearnssクラスのスレッドの開始や終了待ちの処理がメチャクチャに見えます。その辺りはデバッグ済みで、意図通り動作しているのでしょうか。
jimbe

2022/06/20 18:17 編集

s.start() で止まってそうに見えますが…。 Thread オブジェクトは放置されています。 何もしてない ThreadLearnss は使われていませんし。 乱数で待つってカレンダーに足している部分のことでしょうか。
int32_t

2022/06/20 23:20

> s.start() で止まってそうに見えますが…。 ぬるぽですよねえ。
tuka

2022/06/20 23:24

一応デバック済みで大方意図通りの動作はしています。 乱数で待ってカレンダーに足している部分のことですが、乱数表示を昇順に出力したいです。 ThreadLearnssでスレッドID取得させるなど、活用したほうがプログラムとして正しい書き方になりますよね。 Threadオブジェクトを有効に使うにはどうしたらよいでしょうか?

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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