当前位置: 首页 > 面试题库 >

为什么这段代码给出奇怪的结果?好随便喔?

贾飞鸿
2023-03-14
问题内容

我有一段代码会生成一些随机数并在控制台上打印出来。但是我对它所打印的图案感到好奇,例如,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(10)+" ");    
    }
}

结果:0 1 2 3 4 5 6 7 8 9- 新行中的每个数字。

如果您稍微更改此代码!喜欢,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(11)+" ");    
    }
}

结果:8 9 2 2 10 10 8 8 0 0- 换行中的每个数字。

根本不是随机的0123456789是什么原因呢?


问题答案:

产生序列的原因是,通过使用其下一种方法,使Random可预测具有可预测和可重复的序列,可以测试软件。每当特定的长种子参数是Random构造函数的参数时,实例化的Random对象都应该通过其next方法返回相同的值序列。这是java.util.Random的故意功能。

java.util.Random有两个构造函数:

Random()

Random(long seed)

没有长整数种子的构造函数使用系统时间为伪随机数生成器创建种子值。没有两个Random实例化将使用相同的种子,并且您应该获得一个非常好的伪随机序列。使用不带种子的构造函数的随机实例化将创建一个实例,该实例具有不可预测的值序列,这些值将是伪随机的。

具有种子值的构造函数仅用于使用其下一种方法使具有可预测序列的Random确定性。种子的典型用途是用于软件测试,其中结果必须是可预测的和可重复的。每个使用相同长种子整数的Random实例每次都会创建相同的结果序列。当使用nextInt(10)方法获取10个整数值之一时,使用的特定长度会使该序列一次又一次成为0
1 2 3 4 5 6 7 8 9。每次执行软件时可重复的此可预测序列和其他可预测序列对于测试软件非常有用,而不是用于创建不可预测的伪随机序列。



 类似资料:
  • 问题内容: 因此,当我在Java中使用Doubles进行加法或减法时,它会给我带来奇怪的结果。这里有一些: 如果我加上,它给了我。没错 如果我添加,它会给我(重复s 的数量可能会关闭)。错了 如果我减去,它就会给我(再次,重复的s可能会关闭)。错了 起初我以为这只是将双精度数与十进制值相加的问题,但我错了。以下工作正常: 现在,添加的第一个数字是保存为变量的双精度数,尽管第二个变量从捕获文本。例如

  • 题目描述 Java 数组扩容问题:实现动态的给数组添加元素效果,实现对数组扩容 原始数组 int[] arr = {1,2,3} 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4} 题目来源及自己的思路 定义 arr1 定义 arr2,比 arr1 的长度长 1 在 arr1 的长度内,把 arr1 的值赋值给 arr2 arr2 的最后一个位置赋值为 4,也就是要加入的数据 因为

  • 问题内容: 我正在使用Python 3.6.1,但遇到了一些非常奇怪的事情。我有一个简单的字典作业错字,花了很长时间才找到。 输出量 代码在做什么?IMO应该什么时候都没有提出。起初,我认为它正在创建一个切片。但是,键入会引发一个。我也输入了控制台,但控制台没有打印任何内容。我以为也许它回来了,但是我不太确定。 我还认为这可能是单行if语句,但这也不应该是正确的语法。 此外,应提出一个。 我很困惑

  • 我试图做一个函数,返回数组的长度,但函数总是返回8

  • 问题内容: 试图在LINQ查询(使用Entityframework)中实现条件创建了奇怪的查询。在某些情况下,即使阈值设置为180秒,这些查询也会超时: 使用一些不太优雅的if语句,我没有任何问题,查询在几秒钟内返回: 条件语句都是从查询字符串传递的,这就是为什么它们有时可能带有值而有时却没有值的原因。 使用三元运算符时会出现相同的问题 关于这些内联条件为何表现如此差的情况,是否有合理的解释? 问

  • 我想了解为什么一段代码不会抛出NullPointerException。 请考虑以下代码: 方法被重复调用,同时以下代码在单独的线程中运行: 只有一个实例。 从不引发NullPointerException。 但是,当方法暂停时,即使暂停0毫秒,也会按预期引发NullPointerException: 我的理解是,在理论上,在检查和调用之间存在竞争条件。在实践中,如果不引入暂停(即从后续方法调用中