【问题标题】:static arrays are not the same [java]静态数组不一样[java]
【发布时间】:2013-04-24 04:51:34
【问题描述】:

我正在尝试创建一个 Java 程序来生成飞机上的座位数量。到目前为止,我已经能够做到这一点,但我的问题是每次运行客户端时生成的数字都不同。我需要它们每次都一样...

我不确定我做错了什么,有人可以帮助我吗?

import java.util.Random;
import java.util.Arrays;

public class Airplane {
    public static Random randomNumbers = new Random();
    public static int[] oSeatLeft = new int[10];
    public static int[] mSeatLeft = new int[10];
    public static int[] wSeatLeft = new int[10];
    public static int oSeat = 0;
    public static int mSeat = 0;
    public static int wSeat = 0;
    public static final int sCheck = 0;

    public void genWSeats() {

        int randSeatFill = 0;
        if (wSeat == 0) {
            for (int counter = 0; counter < wSeatLeft.length; counter++) {
                randSeatFill = randomNumbers.nextInt(2);
                if (randSeatFill == 1) {
                    wSeatLeft[counter] = 1;
                }
            }
            if (wSeat == 0) {
                wSeat++;
            }
        }
    }

    public int[] getWSeats() {
        System.out.println(java.util.Arrays.toString(wSeatLeft));
        return wSeatLeft;
    }
}

static int wSeat 的目的应该是检查器。如果 wSeat 大于零,则它不应为数组随机生成数字。不确定这里到底出了什么问题....

【问题讨论】:

  • 我正在创建随机数据并且它随机出现。这是什么魔法?

标签: java arrays static


【解决方案1】:

使用Random 构造函数和seed

public static Random randomNumbers = new Random(42);

这样总是生成相同的随机数序列。 42 只是一个例子,你可以使用任何你想要的值。

【讨论】:

  • 好的很好,到目前为止似乎工作。我刚刚删除了 checker if 语句,答案保持不变......我认为这没关系......
  • 谢谢!这有很大帮助!所以我现在的问题是....当我创建多个作为此类扩展的对象时,每个类中的随机数仍然相同....有没有办法只初始化一个变量,但让它生成每个班级的人数不同?
  • @Brian Murphy:我认为这可能有点棘手。每个类都需要自己的静态Random-instance。
【解决方案2】:

在初始化时使用Random(long seed) 传递种子。这将保证生成的数字序列始终相同(因为它是一个伪随机数生成器)。

【讨论】:

    【解决方案3】:

    Random的构造函数中传递种子,每次都会生成相同的数字

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2013-12-31
      • 2018-09-03
      • 1970-01-01
      • 2013-04-11
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多