You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:50:53