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

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

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

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

Q&A

解決済

4回答

870閲覧

ループが繰り返されすぎてフリーズしてしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2017/10/26 18:35

入力された確率で何回連続あたりを引けるのかというのを表示させるのに下記のようなコードを書いてみたのですが、とても大きい確率が入力されるとフリーズしてしまいます。より高速化し大きい確率が入力されても耐えられるようにする方法を教えてください。

double m ;    int count =1;    double probability; for (m = Math.random(); probability > m; count ++) { m = Math.random(); } コード

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

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

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

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

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

ttyp03

2017/10/27 00:24

probabilityには入力値が入るということでしょうか?(省かれているだけ?)またとても大きい確率とはどのような値でしょうか。具体的に書いていただけるとよりよい回答が得られると思います。
退会済みユーザー

退会済みユーザー

2017/10/27 11:45

入力値が入ります。0.9999999、、、、、のような値です。ここまで大きくなくても処理しきれないようですが具体的にいくつ以上が無理かというのは分かっていません。
退会済みユーザー

退会済みユーザー

2017/10/27 13:26

皆様の回答から上限値を設定することが解決策だと思うのですが、上限値の設定で疑問があります。固まってしまったと感じない範囲内での最高値を上限値として設定したいのですが、速さというのは書いたコードだけでなく利用する端末の性能にも依存してくるものなのでしょうか?手元にある端末でテストするのと実際に使う人の端末性能を考慮して余裕を持たせるべきでしょうか?
guest

回答4

0

もしかして、大きすぎるというか1に近すぎる数を指定しようとして本当に1になってしまっていませんか。

https://ideone.com/JrLKkY

投稿2017/10/27 09:55

yuba

総合スコア5568

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

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

退会済みユーザー

退会済みユーザー

2017/10/27 11:50

1に近い値を指定すると1になってしまうのですか?
yuba

2017/10/27 12:00

コンピュータは真の実数は扱えず、実際には飛び飛びの値を実数であるかのように見せているだけなので。
guest

0

ベストアンサー

回数の上限を決めて打ち切るくらいしかないのでは。

java

1int limit = 1_000_000_000; 2for (m = Math.random(); probability > m; count++) { 3 m = Math.random(); 4 if (count >= limit) { 5 System.out.println(limit + "回以上"); 6 break; 7 } 8}

投稿2017/10/26 18:50

swordone

総合スコア20651

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

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

退会済みユーザー

退会済みユーザー

2017/10/27 11:51

ありがとうございます。 ほかの方の回答を見ても上限設定ぐらいしかなさそうですね、、、
guest

0

入力された確率で何回連続あたりを引けるのか

プログラム以前に、仕様がおかしいと思います。
上限回数が設定されていないので、この仕様では無限にループが実行されてしまいます。
「入力された確率で上限x回中何回連続あたりを引けるのか」と仕様を直すべきです。

投稿2017/10/27 01:08

tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2017/10/27 11:48

仕様を変えずにというのはそもそも難しいということですね
guest

0

フリーズしてしまっている原因によって違うと思います。
単純にJavaで今の処理に何かをするだけでうまく行くかというと、難しい気がしますが
それも原因次第です。
メモリ使用量を見てみるなど、確認できるところからやってみるのが良いのではないでしょうか。
(そもそも本当にフリーズしているのですか?
単に時間がかかっている訳ではなく、フリーズと判断した理由はなんでしょうか。)

投稿2017/10/26 23:44

yuki-saito

総合スコア928

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

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

退会済みユーザー

退会済みユーザー

2017/10/27 11:47

しばらくブラックアウトしてかなりの時間がたってから応答がありませんとの警告が出てくるためフリーズしたと判断しました。
yuki-saito

2017/10/27 11:59

実行中の可能性はありますよ。 プロセスの状態やメモリの状態は確認していただいた方が良いかと思います。
退会済みユーザー

退会済みユーザー

2017/10/27 13:22

実行中なのかもしれませんが、結局固まったまましばらく動かなくなってしまうことが問題で、単に時間がかかっているだけのいう状況を解決したいです。
yuki-saito

2017/10/27 13:40

はい、ですから原因追求をしなければいけないと言っています。 実行中だからいいとは言っていませんよ。 プロセスやメモリの状態を見て解析をしていくのは当然やるべきことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問