【问题标题】:Numbers missing from stack and linkedlist JAVA?堆栈和链表JAVA中缺少数字?
【发布时间】:2017-04-18 11:54:40
【问题描述】:

我正在尝试实现代码以一定精度将十进制转换为二进制,为此我使用堆栈和链表来添加计算的非十进制和小数部分。然后我使用 Stringbuilder 一个一个地弹出/轮询元素以获取最终的二进制数。消息来源:http://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/

当我将元素推送到堆栈/列表时,我看到它们正在被推送(为此使用 o/p stmts)。出于某种原因,我在弹出元素时看不到它们。

这是我的代码

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

公共类 BinaryToDecimal {

public String toBinary(float n, int p){
    int non_dec = (int) Math.floor(n);
    Stack<Integer> s_non_dec = new Stack<>();
    LinkedList<Integer> q_dec = new LinkedList<>();
    float dec = n - non_dec;
    int quotient = 1;
    while(quotient > 0){
        quotient = non_dec/2;
        int remainder = non_dec%2;
        System.out.println("quotient"+quotient+"non_dec"+non_dec+"remainder"+remainder);
        s_non_dec.push(remainder);
        non_dec = quotient;
    }

    while(p>0){
        System.out.println("before dec"+dec);
        dec = dec*2;
        System.out.println("after dec"+dec);
        if(dec >=1){
            System.out.println("add 1");
            q_dec.add(1);
            dec = dec - 1;
        }
        else{
            System.out.println("add 0");
            q_dec.add(0);
        }
        p--;
    }
    StringBuilder sb = new StringBuilder();
    for(int i=0;i<s_non_dec.size();i++){
        System.out.println("pop"+s_non_dec.peek());
        sb.append(s_non_dec.pop());
    }
    sb.append('.');
    for(int i=0;i<q_dec.size();i++){
        System.out.println("poll"+q_dec.peek());
        sb.append(q_dec.poll());
    }

    return sb.toString();
}

public static void main (String args[]){
    BinaryToDecimal btd = new BinaryToDecimal();
    System.out.println(btd.toBinary(2.47f, 5));
}

}

我的输出:

quotient1non_dec2remainder0
quotient0non_dec1remainder1
before dec0.47000003
after dec0.94000006
add 0
before dec0.94000006
after dec1.8800001
add 1
before dec0.8800001
after dec1.7600002
add 1
before dec0.7600002
after dec1.5200005
add 1
before dec0.52000046
after dec1.0400009
add 1
pop1
poll0
poll1
poll1
1.011

如上所示,即使我很难将 1 和 0 压入堆栈,我的输出也只有 1 用于非小数部分,而不是 1 和 0!小数部分也是如此! 我一直在看这个代码几个小时,任何帮助表示赞赏!

【问题讨论】:

    标签: java linked-list stack


    【解决方案1】:

    你的 for 循环出错了。

    for(int i=0;i<s_non_dec.size();i++){
        System.out.println("pop"+s_non_dec.peek());
        sb.append(s_non_dec.pop());
    }
    

    在这里,您正在循环堆栈大小 s_non_dec.size,它会在每次弹出操作后继续减少,而“i”将在每次迭代后继续增加。您可以更好地检查堆栈是否为空。使用

    while(!s_non_dec.isEmpty()) {
        System.out.println("pop"+s_non_dec.peek());
        sb.append(s_non_dec.pop());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多