【问题标题】:Getting numbers from 1 to 4 in a random order以随机顺序获取从 1 到 4 的数字
【发布时间】:2017-05-04 21:31:42
【问题描述】:

我想在 Android 中获得 4 个随机值(彼此不同)1 到 4。

我写了这样的代码。但是这些值并没有什么不同。

    Random random = new Random();
    int number, idSearch[]=new int[4];
    number = random.nextInt(4);
    idSearch[0] = number;
    for (int i = 1; i < 4; i++)
    {
        number = (int) random.nextInt(4);
        for (int j = 0; j <= i; j++)
        {
            if (idSearch[j] == number) {
                number = random.nextInt(4);
            }

        }
        idSearch[i] = number;
    }

哪里出错了?你能帮帮我吗?

【问题讨论】:

  • 您正在尝试解决错误的问题。您不是在尝试获取 4 个随机数,而是在尝试以随机顺序从 1-4 获取数字。
  • 对不起。我打错了。我正在尝试以随机顺序获取 1-4 中的数字。
  • List&lt;Integer&gt; al = IntStream.of(1, 2, 3, 4).boxed().collect(Collectors.toList()); Collections.shuffle(al); System.out.println(al);

标签: android random


【解决方案1】:

我认为以随机顺序生成具有 1 到 4(含)值的 List&lt;Integer&gt; 的最简单方法是首先创建具有初始值的 List&lt;Integer&gt; 并将其随机化:

List<Integer> list = Arrays.asList(1, 2, 3, 4);

Collections.shuffle(list);

System.out.println(list);

>> [4, 1, 3, 2]

请记住,此列表无法添加或删除。

如果您希望它是可变的,只需将其传递给 ArrayList 的构造函数即可:

List<Integer> mutableList = new ArrayList<>(list);

记得导入java.util.*

【讨论】:

    【解决方案2】:

    如果你使用的是JDK1.8那么你可以随机生成1到4的数字,你可以使用new Random().ints()如下图:

    int[] randoms = new Random().ints(1,5).distinct().limit(4).distinct().toArray();
    

    如果您使用的是JDK1.7或更早版本,则需要使用Collections.shuffle(),而不是重新发明洗牌逻辑。

    【讨论】:

    • 不,我正在尝试以随机顺序获取 1-4 中的数字。
    • 是的,也是这样
    • 致命异常:主要 java.lang.NoSuchMethodError:java.util.Random.ints
    • 你需要JDK1.8,其中ints()已经添加到Random类中
    【解决方案3】:

    您必须创建新对象 Random 并且请在拳头后面使用第二个。

    【讨论】:

    • 提问者已经在创建一个新的Random 对象。我认为您的意思是在第一个 for 循环之后的第二个 for 循环,但我不相信这足以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多