2013-03-02 3 views
1

Я пытаюсь написать программу, которая генерирует случайное школьное расписание со случайными позициями и случайное количество часов для каждого учителя, но с фиксированным общим количеством времени в день. На данный момент программа написана для работы с двумя выходными днями, и я встречая вопрос: случайные сгенерированные значения для количества времени между двух дней одинаковы:Получение одинаковых случайных чисел каждый раз

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 и т. д.

ответ

3

Вы Случайная конструкция отлично - вы используете конструктор по умолчанию, который автоматически использует время в качестве затравки:

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

Но у вас есть/ошибка вставки копии в последней отладочной печати заявление. Вы этикетке написано x2, но вы печатаете x1 и т.д.

System.out.println("x2 = " +x1 +newLine +"y2 = " +y1 +newLine +"z2 = " +z1 +newLine +"m2 = " +m1 +newLine); 
+0

Хороший опечаток, был +1 – gaborsch

+0

Спасибо. Платит, чтобы прочитать код. Из названия, сначала я догадался, что это будет другой случай использования того же начального семени. –

+0

Спасибо. Это то, что происходит, когда вы слишком устали, чтобы проверить код. :) –

1

Я не вижу никакой инициализации генератора псевдослучайных чисел.

Вам необходимо установить семена PRNG.

+0

[это дубликат] (http://stackoverflow.com/questions/10239346/new-randomx-always-generates-the-same-numbers) –

+0

Наоборот - этот вопрос использует конструктор Random, который принимает семя и одно и то же семя. –

+0

Это не дубликат. Другой - это C#, это Java. И посев здесь не проблема. –

0

LOL, это ошибка копипаст

последняя строка должна гласить

System.out.println (» x2 = "+ х2 + Newline +" y2 = "+ у2 + Newline +" z2 = "+ z2 + Newline +" м2 = "+ m2 + Newline);

но это звучит как классическая проблема случайных семян. Это довольно забавно.

Смежные вопросы