MergeQueue在return语句中缺少一些值

Ai Zhu Xue

我方法目的是将2个排序的队列合并到一个较大的字母A-Z的排序队列中并返回它。我的方法在大多数情况下都有效(即返回AZ),但是有时它遗漏了字母Y,Z,或者有时只是丢失了我返回队列中的字母Z本身这是我所说的例子。q1和q2的

示例将在结果队列中生成缺失的Y和Z。
q1是包含(ACEHIJKMNPQRSTUXYZ)
的字符串队列q2是包含(BDFGLOVW)的字符串队列
这2个参数传递到我的merge方法中。

 private static Queue<Comparable> merge(Queue<Comparable> q1, 
                                       Queue<Comparable> q2) {
    Queue<Comparable> q3 = new Queue<Comparable>();
    while (!q1.isEmpty() && !q2.isEmpty()){
        if (less(q1.peek(),q2.peek())) q3.enqueue(q1.dequeue());
        else if (less(q2.peek(),q1.peek())) q3.enqueue(q2.dequeue());
        if (q1.isEmpty() && !q2.isEmpty()) q3.enqueue(q2.dequeue());
        else if (q2.isEmpty() && !q1.isEmpty()) q3.enqueue(q1.dequeue());
    }
    //while (!q1.isEmpty()) q3.enqueue(q1.dequeue());
    //while (!q2.isEmpty()) q3.enqueue(q2.dequeue());
    return q3;
}


我试图解决此问题的方法是

while (!q1.isEmpty()) q3.enqueue(q1.dequeue());
while (!q2.isEmpty()) q3.enqueue(q2.dequeue()); 


它解决了!但是,我对这种解决方案不满意。我通过使用System.out.println调试此代码上方的代码来找出问题,以查看初始的while循环后q1和q2是否为空。在这种情况下,初始的while循环结束后q1不为空。因此,我知道问题出在我的条件语句中,但不确定在哪里。我的逻辑有点偏离。

但是我只是不明白这段代码上面的实现是如何省略Y和Z的,因为循环一直持续到q1和q2都为空。如果Y和Z没有排队到q3,则意味着q1仍然保留Y和Z,并且显然不为空,并且代码应继续运行直到q1为空。

有人可以解释q1是如何使Y和Z不进入q3的吗?以及如何使用比我发现的解决方案更有效的编码来修复它。

阿斯蒙德·埃尔德胡塞特(Aasmund Eldhuset)

while循环的条件!q1.isEmpty() && !q2.isEmpty()-即两个队列都不能为空。这是一个正确的条件,因为循环主体会窥视两个队列,并且如果其中一个队列为空则将失败。但是,如果一个队列中的所有元素都小于另一个队列中的某些元素,则循环终止后,这些元素将留在另一个队列中。但是,由于在每次迭代中仅从一个队列中删除一个元素,所以其中一个队列将在另一个队列之前排空。因此,在循环之后,恰好一个队列将为空,而另一个队列将不会为空。

因此,最后的操作必须是将所有元素从非空队列移入结果队列。由于您知道只有一个队列将是空的,因此通过添加两个队列中的所有元素来做到这一点是安全的,因为添加空队列中的所有元素均无效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表理解缺少一些值与编写循环

来自分类Dev

列表理解缺少一些值与编写循环

来自分类Dev

缺少一些括号

来自分类Dev

if语句中缺少值错误

来自分类Dev

需要一些帮助从并行数组/输出语句中检索数据

来自分类Dev

Scrapy缺少一些html元素

来自分类Dev

JNA:缺少一些特定方法

来自分类Dev

Android BufferedReader缺少一些字母

来自分类Dev

缺少一些MFC标头

来自分类Dev

INSERT INTO语句的一些问题

来自分类Dev

V93k 测试方法参数类型缺少一些可接受的值?

来自分类Dev

出现错误:switch语句中缺少return语句

来自分类Dev

使用for语句从类中回显一些属性值

来自分类Dev

DataGridView中缺少一些多对一的对象

来自分类Dev

在根据值对地图进行排序时,缺少一些值。是什么导致这种奇怪的行为?

来自分类Dev

OpenAPI的一些未知值

来自分类Dev

“大于”一些高度值()

来自分类Dev

Cookie 显示一些随机值

来自分类Dev

setState 只更新一些值

来自分类Dev

在PHP中缺少一些CURL常量

来自分类Dev

沿DataFrame列平均,但缺少一些行

来自分类Dev

消息未完全发送。缺少一些文字

来自分类Dev

我似乎缺少了一些东西。

来自分类Dev

范围中缺少一些JavaScript变量

来自分类Dev

缺少一些JavaFX文档(NetBeans 11)

来自分类Dev

PostgreSQL中缺少一些.dll文件

来自分类Dev

RecvFrom缺少一些UDP数据包

来自分类Dev

SublimeText-命令面板中缺少一些命令

来自分类Dev

Ubuntu 16上缺少一些菜单栏