Java技术问询:如何用列表B的数依次减列表A元素至0并展示过程
问题分析与解决方案
需求回顾
需要用List B的元素依次减去List A的每个元素,直到List A的当前元素被减至0,同时输出每一步的余额变化。示例中List A的第一个元素10消耗了List B的前4个元素,第二个元素9消耗了List B的第5、6个元素,即List B是按顺序连续使用,不会重复从头遍历。
原代码的问题
- 运算逻辑错误:
a = -b完全不符合需求,正确的运算应该是a = a - b - 循环结构错误:嵌套的for循环会一次性遍历完整个List B,不管当前A的元素是否已经减到0,且do-while的条件会导致无限循环
- 未跟踪B的遍历位置:处理完A的一个元素后,没有记录B的当前位置,会导致重复使用B的元素
- 无输出逻辑:没有打印每一步的运算过程
正确实现代码(Java)
import java.util.List; public class SubtractLists { public static void main(String[] args) { List<Integer> listA = List.of(10, 9); List<Integer> listB = List.of(1, 2, 3, 4, 5, 4); // 跟踪List B的当前遍历索引 int bIndex = 0; int bSize = listB.size(); for (int currentBalance : listA) { // 当余额大于0且还有B的元素可用时继续 while (currentBalance > 0 && bIndex < bSize) { int bValue = listB.get(bIndex); int newBalance = currentBalance - bValue; // 输出运算步骤 System.out.printf("%d-%d=%d%n", currentBalance, bValue, newBalance); // 更新余额和B的索引 currentBalance = newBalance; bIndex++; } } } }
代码逻辑说明
- 索引跟踪:用
bIndex记录List B当前使用到的位置,确保处理完A的一个元素后,继续从B的下一个元素开始 - 循环控制:对每个A的元素,用while循环判断余额是否大于0且还有B的元素可用,避免无效循环
- 步骤输出:每次运算后直接打印当前的减法表达式和结果,符合示例要求
- 边界处理:当List B的元素用完但A的元素还没减到0时,循环会自动停止(可根据需求补充后续逻辑,比如提示元素不足)
内容的提问来源于stack exchange,提问作者Azfar
相关产品推荐
相关产品推荐

