Java setMethod不生效 传值未赋值 长除法输出全0问题排查
问题根因
你的所有业务类都各自创建了独立的Result实例,没有共用同一个对象存储计算结果:Divider计算出来的属性值存在自己新建的Result里,Formatter读取的是自己新建的空白Result,属性自然都是int类型的默认值0,并不是set方法不生效。
修复步骤
1. 改造类构造方法,支持传入共用实例
- 修改
Divider构造方法,不要自己新建Result,改用外部传入的共用实例:
public class Divider { Result result; // 替换原有无参构造 public Divider(Result result) { this.result = result; } // 其余原有方法保持不变,注意清理代码里多余的反引号和乱码字符 }
- 修改
Formatter构造方法,使用外部传入的共用Result和Divider实例,同时删除方法里多余的enter code here等乱码:
public class Formatter { Result result; Divider divider; private int firstIndexPartialDividend = 0; private int countSpace = 0; // 替换原有无参构造 public Formatter(Result result, Divider divider) { this.result = result; this.divider = divider; } // 其余原有方法保持不变,注意原来的format方法是无参,删掉多余的参数声明即可 }
- 清理
Result类的无效构造逻辑,删除乱码:
public class Result { // 原有属性保持不变 public Result() { // 删掉原来的无效赋值:this.dividend = dividend; this.divisor = divisor; } // 原有get/set方法保持不变 }
2. 改造Main类初始化逻辑,全局共用同一个Result实例
public class Main { public static void main(String[] args) { // 全局只创建一个Result实例,所有类共用 Result result = new Result(); Divider divider = new Divider(result); String[] myTestArray = new String[]{"1234", "12"}; if (myTestArray.length != 2) { System.out.printf("You can not use %d arguments. To perform division, you need to use 2 arguments", myTestArray.length); System.exit(1); } int dividend = Integer.parseInt(myTestArray[0]); int divisor = Integer.parseInt(myTestArray[1]); divider.divide(dividend, divisor); Formatter formatter = new Formatter(result, divider); formatter.format(); } }
后续注意事项
修改完成后Result的属性就能正常读取到计算值,你当前的Formatter只实现了前两行的打印逻辑,后续补充完余数、下一级被除数的遍历打印逻辑,就能输出完整的长除法格式。
内容的提问来源于stack exchange,提问作者Vitalii Smahlenko
相关产品推荐
相关产品推荐

