Javaの本を購入し、演習を行いましたが思った以上に理解できませんでした。
例題と演習を記入いたしますので、どなたかご教示くだされば幸いです。
ちなみにですが、本は初心者向けで例題のみで解けるものと思われます。
【例題1】0~9の数値を乱数で生成して表示
import java.util.Random;
public class Lesson2to14 {
public static void main(String[] args) {
Random rand = new Random();
int lucky = rand.nextInt(10);
System.out.println("今日のラッキーナンバーは" + lucky + "です。");
}
}
【演習1】一桁の正の整数値、一桁の負の整数値、二桁の正の整数値をランダムで生成せよ
import java.util.Random;
public class Exercise2to7 {
public static void main(String[] args) {
Random rend = new Random();
int lucky = rend.nextInt(10);
System.out.println("一桁の正の整数値を表示します:" + (lucky + 1));
Random rend2 = new Random();
int lucky2 = rend2.nextInt(9);
System.out.println("一桁の負の整数値を表示します:" + -lucky2);
Random rend3 = new Random();
int lucky3 = rend3.nextInt(90);
System.out.println("二桁の正の整数値をランダムに生成します:" + (lucky3 + 10));
}
}
演習1に関しては例題からなんとなく理解をしてプログラムを組むことができました。(当たってるかは不明です...)
しかし演習2と3については例題1では組めるのか理解できません。
【演習2】キーボードから読み込んだ読み込んだ整数値±5の範囲の整数値をランダムに生成して表示するプログラムを作成せよ。
0~5であればrend.nextInt(6)で簡単にランダム生成できますが、
-5~5の範囲となると例題だけでは何も思いつきませんでした。
【演習3】
-1.0以上1.0未満の実数値をランダムに生成して表示せよ。
上記の場合はnextFloatから生成された数値から-1引けばできると思います。
しかし、例えば-2.0以上10以下など正負の値をランダムで生成する方法が解っていません。
こちらも良かったらご教示お願い致します。
No.2ベストアンサー
- 回答日時:
「例題だけわかる」なんて思わないで、ちゃんとマニュアルで仕様を確認しましょう。
また、少しだけ算数の復習も必要です。
Random.nextInt(n)は、 0≦x≦n-1 となる整数の乱数xを返します。
だから、例題では
> int lucky = rend.nextInt(10);
が「0~9の乱数」になるのです。
ここで、算数のおさらいです。
不等式の各辺に同じ値を足しても、大小関係は変化しなかったですよね?
a≦x≦b の各辺に-aを足すと
0 ≦ x-a ≦ b-a
になります。
y = x-a
m = b-a +1
と置くと
0 ≦ y ≦ m - 1
つまり、 y=nextInt(m)で 0~m-1の乱数を発生させれば
y=x-a
x=y+a
で、xが求められます。
> int lucky = rend.nextInt(10);
> System.out.println("一桁の正の整数値を表示します:" + (lucky + 1));
先程のように、nextInt(10)は0~9の乱数です。
0≦lucky≦10-1
です。では、lucky+1の範囲はどうなるでしょう?
各辺に1足すと
0+1≦lucky+1≦10-1+1
∴1≦lucky+1≦10
10は2桁の整数ですよね?
> int lucky2 = rend2.nextInt(9);
> System.out.println("一桁の負の整数値を表示します:" + -lucky2);
0≦ lucky2 ≦8
です。不等式の各辺の負の値を掛けると、大小関係が反転しましたよね?
-8≦ l-ucky2 ≦0
0は負ではないし、-9が範囲外です。
方法は2つあって、一つは上で書いた式を使って、a=-9,b=-1として計算するもの
もう一つは、1~9の乱数の計算方法がわかっているのですから、単純にそれを正負反転させるものです。
> 【演習2】
上の式を使えばいいです。
これも2つ方法があって
一つは、 a=入力-5,b=入力+5とするもの
もう一つは、 a=-5,b=+5にして、求めた乱数に「+入力値」するものです。
nextFloatから任意の範囲の実数乱数を求める方法も、基本は一緒で、不等式を変形していきます。
a≦x<b の乱数を求めるなら、まず-aします
0.0≦x-a<b-a
a<bなので、 b-a>0ですから、b-aで割っても大小関係は変化しません。
0.0≦(x-a)/(b-a)<1.0
y=(x-a)/(b-a) とすれば、
0.0≦y<1.0 ですから、nextFloatの範囲と一致します。
yが決まったら
x=(b-a)*y + a
でxが求まります。
> -1.0以上1.0未満の実数値をランダムに生成して表示せよ。
> 上記の場合はnextFloatから生成された数値から-1引けばできると思います。
nextFloat は 0.0≦x<1.0の乱数です。-1すれば
-1.0≦x-1.0<0.0
です。-1.0以上1.0未満にはなりません。
> -2.0以上10以下
両方とも=を含む、だとちょっとやっかいです。nextFloatは、「1.0を未満」なので、単純に使ったら、上限か下限のどちらかは=を含みません。
a以上b以下にするには工夫が必要です。
No.1
- 回答日時:
JAVAのプログラムというより数の概念と「さんすう」の理解を問われる問題です。
演習2
rend.nextInt(11)から5を引いた数を入力値に足す。
これが解れば演習3も自ずと解るはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
processingで String str="AAAB...
-
論理演算子”||”またはの入力方法
-
countに実行した回数をいれたい...
-
javaでforを用いて進数を変換す...
-
エラー(互換性の無い型)
-
繰り返しによる星印の出力
-
(急いでいます)Javaで3回間違...
-
2次元配列の並び替え
-
java キーボード入力された値の...
-
ループ処理の際、最後だけ","を...
-
配列を逆順させて表示させる方...
-
キーボードから10人分の点数を...
-
Ctrl+Zが入力されると終了する...
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
javaで九九の表を作りたい
-
ヒストグラム
-
javaのエラーが回収できない
-
Java 配列<選挙>
-
javaが上手くいきません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
階乗の式
-
キーボードから10人分の点数を...
-
Java 配列<選挙>
おすすめ情報