Java栈操作结果异常:输出1而非预期4,求修正方案
问题分析与修正
你的代码问题在于仅执行了一次栈元素的弹出和计数操作,未遍历栈中所有元素。9的二进制是1001,转换过程中栈内会存入4个元素,你需要循环处理直到栈为空才能得到正确结果。
修正后的代码
Stack<String> st = new Stack<String>(); int num=9; while(num > 0){ st.push(Integer.toString(num%2)); num/=2; } int d=0; // 将if替换为while,循环处理栈内所有元素 while(!st.isEmpty()){ d++; st.pop(); } System.out.println(d);
说明
- 原代码的
if语句仅触发一次计数和弹出操作,所以d仅会加1;换成while循环后,只要栈不为空就会持续弹出元素并累加计数,最终得到正确的4。 - 如果你只是想计算整数的二进制位数,其实可以不用栈,直接通过循环除以2或者位运算就能完成计数,但既然你选择了栈实现,修正循环逻辑即可解决问题。
内容的提问来源于stack exchange,提问作者Van Le Thanh
相关产品推荐
相关产品推荐

