在Java开发中,带余数整数加法与重置逻辑是常见的业务需求,比如统计分批处理的数据总量、记录累计操作次数同时保留未凑整的余数,还需要支持清空所有累计状态重新开始。这类逻辑可以通过封装一个专门的工具类来实现,将累加值、余数等状态作为成员变量,对外提供加法方法和重置方法。

核心设计思路
实现这个逻辑需要明确几个核心点:首先需要一个变量存储当前的累加总和,一个变量存储当前的余数;加法操作时要先将新传入的数值和原有余数相加,再计算新的总和与余数;重置操作需要将总和和余数都归零,恢复到初始状态。
成员变量定义
我们可以定义一个名为RemainderAdder的类,包含两个私有成员变量:
total:int类型,存储当前的累加总和remainder:int类型,存储当前的余数,取值范围为大于等于0小于除数
这里还需要定义一个除数,用于计算余数,我们可以把它作为构造方法的参数传入,也可以固定为某个值,这里以固定除数为10为例,方便演示。
加法方法实现
加法方法的逻辑是:将传入的待加数值和当前余数相加,得到临时总和,再用临时总和除以除数得到新的总和和余数,更新成员变量即可。
public class RemainderAdder {
// 除数,用于计算余数,这里固定为10
private static final int DIVISOR = 10;
// 当前累加总和
private int total;
// 当前余数
private int remainder;
/**
* 构造方法,初始化总和和余数为0
*/
public RemainderAdder() {
this.total = 0;
this.remainder = 0;
}
/**
* 带余数的加法操作
* @param num 待加的整数
*/
public void add(int num) {
// 原有余数加上新传入的数值,得到临时值
int temp = remainder + num;
// 计算新的总和:原有总和加上临时值除以除数的商
total += temp / DIVISOR;
// 计算新的余数:临时值除以除数的余数
remainder = temp % DIVISOR;
}
/**
* 重置所有状态,总和和余数归零
*/
public void reset() {
total = 0;
remainder = 0;
}
/**
* 获取当前累加总和
* @return 总和
*/
public int getTotal() {
return total;
}
/**
* 获取当前余数
* @return 余数
*/
public int getRemainder() {
return remainder;
}
// 测试示例
public static void main(String[] args) {
RemainderAdder adder = new RemainderAdder();
// 第一次加3,余数3,总和0
adder.add(3);
System.out.println("第一次加3后,总和:" + adder.getTotal() + ",余数:" + adder.getRemainder());
// 第二次加8,3+8=11,总和加1,余数1
adder.add(8);
System.out.println("第二次加8后,总和:" + adder.getTotal() + ",余数:" + adder.getRemainder());
// 第三次加15,1+15=16,总和加1,余数6
adder.add(15);
System.out.println("第三次加15后,总和:" + adder.getTotal() + ",余数:" + adder.getRemainder());
// 重置
adder.reset();
System.out.println("重置后,总和:" + adder.getTotal() + ",余数:" + adder.getRemainder());
}
}重置逻辑说明
重置方法reset()的实现非常简单,只需要将total和remainder两个成员变量都赋值为0即可,这样所有累计的状态都会被清空,下次调用加法方法时会从初始状态开始计算。
注意事项
在实际使用中,如果除数不是固定值,可以把除数定义为成员变量,在构造方法中传入,同时要注意处理除数为0的异常情况。另外如果累加的数值可能超过int的范围,可以将成员变量类型改为long,避免溢出问题。如果需要支持多次加法后批量处理余数,可以在类中额外添加对应的方法,根据业务需求扩展即可。