队列和迭代问题

时间:2013-04-06 14:59:55

标签: java loops queue iteration

有人可以帮我解决这个问题吗?我不知道如何解决它甚至如何开始。

以下代码段是从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. 以下是可能的:1 2 3 4 5
    真实,虚假或信息不足?

  2. 以下是可能的:1 3 5 4 2
    真实,虚假或信息不足?

  3. 以下是可能的:1 3 5 2 4
    真实,虚假或信息不足?

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.但是,任何数量的这些都可以放入队列并在末尾打印。

因此有三个明确的情景:

  1. 打印所有条目(没有排队)。你会得到12345。
  2. 所有条目都排队。再次,你会得到12345。
  3. 打印了一些条目 - 有些条目已排队。
  4. 在案例3中,显然您将获得两个增加的序列,其中第一个序列中缺少的数字出现在第二个序列中

    所以,现在你可以看到会发生什么,我建议你开始考虑如何认识这些。