0

CS 入門クラスのプログラムをプロジェクトとして作成する必要があります。プログラムは

  1. ユーザーに最小値を尋ねます (負の値の場合もあります)
  2. ユーザーに最大値を尋ねます (負の場合もありますが、最小値より大きくなければなりません)
  3. ユーザーが指定した最小値と最大値の間の 20 の乱数を生成し、
  4. 生成された 20 個の乱数の平均を生成します。

プログラムを完了したと思っていましたが、プログラムを実行すると数値がランダムになることはありません。20 個の数値はすべて、emacs に入力した最大値と同じ値になります。もちろん、この場合も平均値は最大値と同じです。これはこれまでの私のプログラムです...

import java.util.Scanner;
import java.util.Random;

public class CS_ProjectOne
{
    public static void main(String[] args)
    {
    int minimum_integer;
    int maximum_integer;
    int rn1;
    int rn2;
    int rn3;
    int rn4;
    int rn5;
    int rn6;
    int rn7;
    int rn8;
    int rn9;
    int rn10;
    int rn11;
    int rn12;
    int rn13;
    int rn14;
    int rn15;
    int rn16;
    int rn17;
    int rn18;
    int rn19;
    int rn20;
    double total;
    double average;
    Scanner keeper;
    Scanner keeper2;
    Random gen;
    gen = new Random();

    keeper = new Scanner(System.in);
    System.out.print("Please enter an integer for the MINIMUM value: ");
    minimum_integer = keeper.nextInt();

    keeper2 = new Scanner(System.in);
    System.out.print("Please enter an integer for the MAXIMUM value: ");
    maximum_integer = keeper2.nextInt();

    rn1 = gen.nextInt();
    rn1 = rn1 % minimum_integer + maximum_integer;
    rn2 = gen.nextInt();
    rn2 = rn2 % minimum_integer + maximum_integer;
    rn3 = gen.nextInt();
    rn3 = rn3 % minimum_integer + maximum_integer;
    rn4 = gen.nextInt();
    rn4 = rn4 % minimum_integer + maximum_integer;
    rn5 = gen.nextInt();
    rn5 = rn5 % minimum_integer + maximum_integer;
    rn6 = gen.nextInt();
    rn6 = rn6 % minimum_integer + maximum_integer;
    rn7 = gen.nextInt();
    rn7 = rn7 % minimum_integer + maximum_integer;
    rn8 = gen.nextInt();
    rn8 = rn8 % minimum_integer + maximum_integer;
    rn9 = gen.nextInt();
    rn9 = rn9 % minimum_integer + maximum_integer;
    rn10 = gen.nextInt();
    rn10 = rn10 % minimum_integer + maximum_integer;
    rn11 = gen.nextInt();
    rn11 = rn11 % minimum_integer + maximum_integer;
    rn12 = gen.nextInt();
    rn12 = rn12 % minimum_integer + maximum_integer;
    rn13 = gen.nextInt();
    rn13 = rn13 % minimum_integer + maximum_integer;
    rn14 = gen.nextInt();
    rn14 = rn14 % minimum_integer + maximum_integer;
    rn15 = gen.nextInt();
    rn15 = rn15 % minimum_integer + maximum_integer;
    rn16 = gen.nextInt();
    rn16 = rn16 % minimum_integer + maximum_integer;
    rn17 = gen.nextInt();
    rn17 = rn17 % minimum_integer + maximum_integer;
    rn18 = gen.nextInt();
    rn18 = rn18 % minimum_integer + maximum_integer;
    rn19 = gen.nextInt();
    rn19 = rn19 % minimum_integer + maximum_integer;
    rn20 = gen.nextInt();
    rn20 = rn20 % minimum_integer + maximum_integer;

    System.out.println("Your random numbers are: " + rn1 + ", " + rn2 + ", " + rn3 + ", " + rn4 + ", " + rn5 + ", " + rn6 + ", " + rn7 + ", " + rn8 + ", " + rn9 + ", " + rn10 + ", " + rn11 + ", " + rn12 + ", " + rn13 + ", " + rn14 + ", " + rn15 + ", " + rn16 + ", " + rn17 + ", " + rn18 + ", " + rn19 + ", " + rn20 + ".");

    total = rn1 + rn2 + rn3 + rn4 + rn5 + rn6 + rn7 + rn8 + rn9 + rn10 + rn11 + rn12 + rn13 + rn14 + rn15 + rn16 + rn17 + rn18 + rn19 + rn20;
    average = total / 20;

    System.out.print("The average is " + average);
    }
}

誰かが助けになり、私を正しい方向に導くことができますか? 私が正しく行っていないこと(または多くのこと)があると確信していますが、それが正確に何であるかはわかりません。

これは、これを機能させようとしている私の短いバージョンです...

import java.util.Random;
import java.util.Scanner;

public class p1
{
    public static void main(String[] args)
    {
    Random gen;
    gen = new Random();
    Scanner keeper;
    int range, user_min, user_max, num1, num2, num3, total;
    double average;

    keeper = new Scanner(System.in);
    System.out.print("Please enter a maximum integer value: ");
        user_max = keeper.nextInt();

        keeper = new Scanner(System.in);
    System.out.print("Please enter a minimum integer value: ");
    user_min = keeper.nextInt();

    range = user_max - user_min + 1;

    num1 = gen.nextInt() % range + user_min;
    num2 = gen.nextInt() % range + user_min;
    num3 = gen.nextInt() % range + user_min;

    System.out.print("The random numbers computed are " + num1 + ", " + num2 + ", " + num3 + ", ");
    }
}

なぜこれはネガを処理できないのですか?そして、私の値はまだ指定された範囲内にありませんか? ヘルプ?

4

4 に答える 4

1

ランダム リストの例:
(デモンストレーションを簡単にするために、Java ではなく Python で)。

1   #!/usr/bin/env python
2   def spawn(user_min, user_max, rounds):
3     import random 
4     sum = 0
5     user_range = user_max - user_min + 1  
6     for i in range(rounds):
7       result = int((random.random() * user_range)) + user_min
8       sum = sum + result
9       print(str(i) + ': ' + str(result))
10     mean = sum / rounds
11    print('range: ' + str(user_range))
12    print('mean: ' + str(mean))

関心のある行は次のとおりです。

  • 5 行目:これは、乱数の広がりを決定します。
  • 行 7:これは range のランダムな値を取得します[0.0, 1.0)。目的のユーザー範囲を掛けます。次に、integer にキャストして末尾の小数点を「切り捨て」ます。次に、結果を範囲の最小許容値に追加します。

例えば:

range = (10) - (-5) + 1 = 16
a_result = (int)(0.14159265359 * 16) + -5 = 3 - 5 = -3
another_result = (int)(0.71828182845 * 16) + -5 = 11 - 5 = 6
于 2013-10-18T06:34:21.990 に答える
0

この線

rn1 = rn1 % minimum_integer + maximum_integer;

間違っている。たとえば、1 から 6 の範囲の数値を生成することを検討してください。次に、計算します。

rn1 = rn1 % 1 + 6;

rn1 % 1は常に 0 に等しいので、常に 6 になります。別の式を使用する必要があります。

于 2013-10-18T02:31:57.513 に答える