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

Java入门者求助:HeadFirst Java第4章90页习题输出异常排查

《Head First Java》第4章习题输出异常排查

嘿,作为Java初学者遇到这种变量作用域的坑太正常了!我来帮你捋清楚问题出在哪~

你说预期输出是14 1但得到了81,结合你给出的代码片段和这道经典习题的内容,大概率是实例变量和局部变量的作用域搞混了,或者循环里的变量操作逻辑错了。下面给你几个具体的排查方向:

1. 先搞清楚两个变量的本质区别

  • 你代码里的counter是实例变量:每个Mix4对象都会拥有独立的counter值,创建多少个对象就有多少份独立的counter。
  • 而main方法里的count是局部变量:它只在main方法内部生效,是一个全局的(相对于方法内)变量,所有操作都是针对同一个值。

如果你的代码里误把本该操作实例变量counter的逻辑用到了局部变量count上,或者反过来,结果就会完全偏离预期。比如如果循环里每次都执行count += 9,9次循环后就会得到9*9=81,这显然和题目要求的逻辑不符。

2. 检查循环内的变量操作逻辑

题目里要求同时满足(x < 9)和(index < 5)的条件,说明存在条件判断或者多层循环逻辑。你需要确认:

  • 是不是没有正确限制index的范围,导致所有9个对象都被执行了错误的操作?
  • 是不是对变量做了乘法而非累加,或者累加的对象/变量完全不对?

3. 对比完整的参考代码

给你贴出这道题的核心逻辑实现,你可以逐行对比自己的代码,找出差异:

public class Mix4 {
    int counter = 0;

    public static void main(String[] args) {
        int count = 0;
        Mix4[] m4a = new Mix4[20];
        int x = 0;
        
        // 第一个循环:创建9个Mix4对象并初始化counter
        while (x < 9) {
            m4a[x] = new Mix4();
            m4a[x].counter = x;
            x++;
        }
        
        x = 0;
        // 第二个循环:处理index<5的对象,累加目标值
        while (x < 5) {
            // 这里的操作要匹配题目要求,比如对counter做乘2后累加
            count += m4a[x].counter * 2;
            x++;
        }
        
        // 输出符合要求的结果
        System.out.println(count + " " + m4a[8].counter);
    }
}

最后小提示

如果你能把代码中省略的部分补充完整,就能更精准地定位问题!不过从81这个结果来看,大概率是局部变量count被错误地执行了9次固定值累加,赶紧检查循环里的变量赋值逻辑吧~

内容的提问来源于stack exchange,提问作者Mykola Rudenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:13