有人可以帮我解决这个问题吗?我不知道如何解决它甚至如何开始。
以下代码段是从1到5的计数控制循环。在每次迭代时,循环计数器打印或放在队列上,具体取决于随机方法返回的布尔结果(假设随机随机返回是真是假。
在循环结束时,队列中的元素将被删除并打印出来。由于队列的逻辑属性,此代码段无法打印循环计数器的某些值序列。您将获得一个输出,并被要求确定代码段是否可以生成输出。
for(count = 1; count <= 5; count++) {
if(random())
system.out.println(count);
else
queue.enqueue(count);
}
while (!queue.isEmpty())
{
number = queue.dequeue();
system.out.println(number);
}
以下是可能的:1 2 3 4 5
真实,虚假或信息不足?
以下是可能的:1 3 5 4 2
真实,虚假或信息不足?
以下是可能的:1 3 5 2 4
真实,虚假或信息不足?
答案 0 :(得分:3)
我没有得到如何解决它甚至如何开始。
以下是关于如何开始的建议:
使用笔和纸,模拟程序的几次运行(随机选择两个分支中的一个而不是每个random()
调用),并查看是否发现任何规律性。即使你不这样做,代码中只有32条不同的路径。
答案 1 :(得分:0)
这令人困惑。查看控制台,如果random()为true,我将打印出count。否则我会将它排队。然后,我打算在最后打印出队列,使每个数字1-5包含在不知道实际订单的情况下打印出来。让队列中的println如下所示会更有用: System.out.println(“Queue”+ number);
答案 2 :(得分:0)
a。 true 。这是random()
返回 true 5次的情况(这将以0.03125的概率发生)
b。让我们假设它是 true :
可能的情况:
当i = 1
random()
返回 true 时,它会打印1。
然后,为了让 b 符合我们的假设,i = 2
必须是random()
返回 false (否则程序将打印1与我们的假设相矛盾。
因此,我们将转到else语句并将其排入队列。
i = 3
也一样。
现在我们要打印4,假设random()
返回 true 。
所以,在队列中我们有:2 3 5
..继续这样思考,你会知道答案。
解决这个问题的关键是假设:
您可以随时假设random()
为真/假。
答案 3 :(得分:0)
你的循环从1到5.但是,任何数量的这些都可以放入队列并在末尾打印。
因此有三个明确的情景:
在案例3中,显然您将获得两个增加的序列,其中第一个序列中缺少的数字出现在第二个序列中。
所以,现在你可以看到会发生什么,我建议你开始考虑如何认识这些。