此代码的输出不正确,

时间:2018-06-19 21:17:39

标签: java

今年夏天,我正在重新编写一些程序,我在做这个问题,如下所示。 编写一个方法折叠,将一堆整数作为参数,然后通过用该对的总和替换每个连续的整数对来折叠它。

基本上,我的方法是返回堆栈的相反顺序,除非在堆栈中奇数个数字的情况下,否则我将至少为我返回总和,而不考虑顺序。 我应该只使用1个队列 我的问题是我在这里哪里出错了,为什么我不能总结我的两个流行音乐。     公共静态堆栈崩溃(Stack sO) {

Queue<Integer> qN = new LinkedList<Integer>();
int x1 = 0;
int x2 = 0;
while(!sO.empty())
{
    qN.add(sO.pop());
}
while(!qN.isEmpty())
{
    int sum = 0;
    x1 = qN.remove();
    if(sO.empty()){

        qN.add(x1); break;
    }
    else{x2 = qN.remove();
        sum = x1 + x2;
    qN.add(sum);}

}
while(!qN.isEmpty()){
    sO.push(qN.remove());
}
return sO;

底部[7,2,8,9,4,13,7,1,9,10]顶部 第一对应该折叠为9(7 + 2),第二对应该折叠为17(8 + 9),第三对应该折叠为17(4 + 13),依此类推:

底部[9、17、17、8、19]顶部

1 个答案:

答案 0 :(得分:1)

这部分代码将是无限循环:

 if(sO.empty()){

        qN.add(x1); break;
    }

您要从队列中删除x1,然后再次将其重新添加到队列中。

修改下段内容的方式

 while(!qN.isEmpty())
        {
            x1=qN.remove();
            x2=qN.remove();
            sO.push(x1+x2);
        }

请记住:如果元素数为奇数,则x2在上一次迭代中将为null。请当心。