gpt4 book ai didi

java - JAVA 堆栈和链表中缺少数字吗?

转载 作者:行者123 更新时间:2023-12-02 13:23:48 26 4
gpt4 key购买 nike

我正在尝试实现以一定精度将十进制转换为二进制的代码,因为我使用堆栈和链表来添加计算的非小数和小数部分。然后,我使用 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;

公共(public)类 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!小数部分也是同样的情况!我已经研究这段代码几个小时了,非常感谢您的帮助!

最佳答案

错误出在你的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());
}

关于java - JAVA 堆栈和链表中缺少数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43471438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com