1

私は、ランダムな位置と各教師のランダムな時間数でランダムな時間割を生成するプログラムを作成しようとしていますが、1日あたりの合計時間は固定されています。今のところ、プログラムは2日間で動作するように作成されていますが、問題が発生しています。2日間の時間のランダムに生成された値は同じです。

import java.util.Random;
public class randomTimetable {  

    public static void main(String[] args) {    
        String newLine = System.getProperty("line.separator"); 
        System.out.println("For each day (x + y + ... n) >= 5 and" +newLine +"(x && y && ... n) <= 2" +newLine);
        createTimetable();

    }
private static void createTimetable() { 
    String x_g1 = "x";
    String y_g1 = "y";
    String z_g1 = "z";
    String m_g1 = "m";
    String[] arrayTimetablePosition1={x_g1, y_g1, z_g1, m_g1};
    String newLine = System.getProperty("line.separator"); 


    System.out.println("Work In Progress" +newLine +"Total subjects = 5" +newLine +"Day 1");    

    Random rand = new Random();
    int min = 0;
    int max = 2;
    int x1 = rand.nextInt(max - min + 1) + min;
    int y1 = rand.nextInt(max - min + 1) + min;
    int z1 = rand.nextInt(max - min + 1) + min;
    int m1 = rand.nextInt(max - min + 1) + min;
    while((x1 + y1 + z1 + m1) != 5) {
        x1 = rand.nextInt(max - min + 1) + min;
        y1 = rand.nextInt(max - min + 1) + min;
        z1 = rand.nextInt(max - min + 1) + min;
        m1 = rand.nextInt(max - min + 1) + min;
    }   

    System.out.println("x1 = " +x1 +newLine +"y1 = " +y1 +newLine +"z1 = " +z1 +newLine +"m1 = " +m1 +newLine);
    System.out.println("Total subjects = 5" +newLine +"Day 2");
    int x2 = rand.nextInt(max - min + 1) + min;
    int y2 = rand.nextInt(max - min + 1) + min;
    int z2 = rand.nextInt(max - min + 1) + min;
    int m2 = rand.nextInt(max - min + 1) + min;

    while((x2 + y2 + z2 + m2) != 5 && (x1 == x2 || y1 == y2 || z1 == z2 || m1 == m2)) {
        x2 = rand.nextInt(max - min + 1) + min;
        y2 = rand.nextInt(max - min + 1) + min;
        z2 = rand.nextInt(max - min + 1) + min;
        m2 = rand.nextInt(max - min + 1) + min;
        }   
    System.out.println("x2 = " +x1 +newLine +"y2 = " +y1 +newLine +"z2 = " +z1 +newLine +"m2 = " +m1 +newLine);
    }
}

具体的には、x1の値はx2と同じであり、y1の値はy2と同じです。

4

4 に答える 4

3

あなたはランダムな構築で問題ありません-デフォルトのコンストラクターを使用しています。これは自動的に時間をシードとして使用します。

public Random() { this(System.currentTimeMillis()); }

ただし、最後のdebug-printステートメントにコピー/貼り付けエラーがあります。あなたはラベルにx2と書かれていますが、x1などを印刷しています。

System.out.println("x2 = " +x1 +newLine +"y2 = " +y1 +newLine +"z2 = " +z1 +newLine +"m2 = " +m1 +newLine);
于 2013-03-02T22:21:50.727 に答える
1

同じシードを使用しているようです。見る:

http://docs.oracle.com/javase/6/docs/api/java/util/Random.html

于 2013-03-02T22:20:43.697 に答える
1

疑似乱数ジェネレータの初期化が表示されません。

PRNGのシードを設定する必要があります。

于 2013-03-02T22:20:54.227 に答える
0

笑 コピペミスです

最後の行を読む必要があります

System.out.println("x2 = " + x2 +newLine +"y2 = " + y2 +newLine +"z2 = " + z2 +newLine +"m2 = " +m2 +newLine);

しかし、それは古典的なランダム シードの問題のように思えます。それはかなり面白いです。

于 2013-03-02T22:34:18.563 に答える