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

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

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

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

Q&A

解決済

3回答

1886閲覧

int fortune=new java.util.Random().nextInt()+1に()の中の数字を増やすのではなく、+する理由

toradhipo

総合スコア2

Java

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

1グッド

1クリップ

投稿2021/09/14 10:49

編集2021/09/14 11:26

java

1public class Main { 2 public static void main(String[] args) { 3 System.out.println("あなたの運勢を占います"); 4 int fortune=new java.util.Random().nextLin(5)+1; 5 switch (fortune) { 6 case1: 7 case2: 8 System.out.println("いいね"); 9 break; 10 case3: 11 System.out.println("普通です"); 12 break; 13 case4: 14 case5: 15      System.out.println("悪い");

この+をつける意味がよくわからなくて...これならそのまま6を入れればいいのではと思ってしまいます。何か訳があるのでしょうか?

退会済みユーザー👍を押しています

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

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

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

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

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

m.ts10806

2021/09/14 10:51

このコードだけでは回答不可 ちゃんとPCから正確にコードを転記してください。 それにRandom()使うなら5は返ってきませんよね。
BeatStar

2021/09/14 10:54 編集

とりあえず、タイトルはわかりやすいように書いてください。 ここはサポートセンターではなく、「ナレッジサービス」です。 今回の質問と似たような問題に直面している人が検索してこのページを参考にする可能性があります。 なのでその人達のためにもタイトルが分かりやすい方がいいですよ。 編集できるので、編集してください。(ケータイからでも編集は可能)
toradhipo

2021/09/14 10:54

今登録して初めて質問したので、あんまり使い方がわからないのですが、ちょっとお待ちください!
m.ts10806

2021/09/14 10:55

せめて質問テンプレートを。 携帯からは参照とコメントくらいにとどめたほうが良いです。 コードもエラーもコピペが前提(「質問するときのヒント」を参照)
toradhipo

2021/09/14 11:08

今書き直しました。すいません!!
BeatStar

2021/09/14 11:10

コードは、"<code>"または"<コード>"というボタンがあるはずなのでそれを押して出てくるヤツの中に書きましょう。 (他にもボタンがあるはずなのでそれらを利用しましょう)
toradhipo

2021/09/14 11:10

今度からよく調べてから質問する様にします。。
BeatStar

2021/09/14 11:20

ご自分の質問文を、「第三者的視点で」読んでみてください。 m.ts10806さんや私の回答にあるようなコードのようになっていますか?
BeatStar

2021/09/14 11:23

惜しい…! ```コード``` のように囲むのではなく、 ``` コード ``` のようにくくってください。 前者だと一行レベルのコードならいいですが、複数行だと微妙なので後者で。
toradhipo

2021/09/14 11:24

あー丁寧にありがとうございます。今試行錯誤してます、、
toradhipo

2021/09/14 11:26

できました!!!
BeatStar

2021/09/14 11:26

あー、えっと、コードの最後の方に ``` みたいなものが出ているはずなので、改行を入れて下に持ってくるとできるはずです。(一個前の修正で)
toradhipo

2021/09/14 11:27

教えてくれてありがとうございます!!!
guest

回答3

0

ベストアンサー

こういう場合は、公式ドキュメントで調べましょう。

公式の「Randomクラス」の nextIntメソッド を見ると、

Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

[訳]
ランダムジェネレータで [0, bound) の範囲の均一分布(?)の疑似乱数を返す。

的な感じでしょうか。(あまり数学が出来ないから詳しくはわかりませんが)

つまり 0≦乱数<bound というところでしょうか。

Java

1int fortune=new java.util.Random().nextInt(5)+1;

は、単に 1~5までの乱数を生成しているだけではないでしょうか。

分解してみるとわかるかもしれません。

Random random = new java.util.Random(); int fortune = random.nextInt( 5 ); fortune++;

という感じでしょうか。

たとえば、random.nextIntが 0 を返したらどうでしょうか。
本来は 1≦乱数≦5 ですよね。

0 を 1 にするにはどうすればいいでしょうか。
そう、+1 をすればいいですね。

よって、nextIntメソッドで取得した値に +1 しているはずです。


[追記1]

0を返すとはどういうことでしょうか。nextInt(5);では0~4で0も含まれているということですか?

…え? そこから?

とりあえず、今は乱数とかに手を出すのはやめておいた方がいいです。

「Java 入門」とかで検索して出てくるサイトとかを読んで理解しましょう。

キーワード: メソッド, 引数, 戻り値

とりあえず、この辺が理解できていないと話になりません。
足し算すら理解していない人に微積分を説明してもわかるはずありませんから。

投稿2021/09/14 11:07

編集2021/09/14 11:21
BeatStar

総合スコア4962

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

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

toradhipo

2021/09/14 11:15

0を返すとはどういうことでしょうか。nextInt(5);では0~4で0も含まれているということですか?
toradhipo

2021/09/14 11:29

わかりました!もっと勉強してからにします!!お時間取らせて、すいませんでした。
guest

0

足りないのは検証と試行錯誤。

java

1 System.out.println(new java.util.Random().nextInt(5)); 2 System.out.println(new java.util.Random().nextInt(5)); 3 System.out.println(new java.util.Random().nextInt(5)); 4 System.out.println(new java.util.Random().nextInt(5)); 5 System.out.println(new java.util.Random().nextInt(5)); 6 System.out.println(new java.util.Random().nextInt(5)); 7 System.out.println(new java.util.Random().nextInt(5)); 8 System.out.println(new java.util.Random().nextInt(5));

「6を直接入れない理由」はRandom.nextInt()を呼び出すと返ってくるのは引数の数値そのままではないから。
ランダムなので乱数。

あとは何かに使うときに+1しないと都合悪いのでしょう(単なる推測)

投稿2021/09/14 10:54

m.ts10806

総合スコア80875

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

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

0

自分が使うAPIの仕様は押さえておいたほうがよいです。
人から教えられたコードをそのまま使うのは、仕様変更に自分が対応できなくなるかもしれません。
無駄なコードが含まれているかもしれません。


new java.util.Random().nextInt(5)

の部分について、APIを確認すると

この乱数ジェネレータのシーケンスを使って、0から指定された値の範囲(0は含むが、その指定された値は含まない)で一様分布のint型の擬似乱数値を返します。

と、ありますので0~4の5種類のどれかがランダムで生成されます。

それに+1するので、結果的にfortuneの値は、1~5になります。

わざわざ書く必要ないかと思いますが、

new java.util.Random().nextInt(5+1)

は、0~5の数値がランダムで生成されます。

投稿2021/09/14 11:34

momon-ga

総合スコア4826

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

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

momon-ga

2021/09/14 11:36

あ、しまった放置してたら回答されてた・・・
toradhipo

2021/09/14 11:38

はーーなるほど理解できました!!!!!!!!ありがとうございます!!!!!!
toradhipo

2021/09/14 11:39

締め切るのが早すぎました、、、すいません、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問