讲师中心 微信公众号
AI工具推荐 视频效率加速

Java中实现列表间循环减法直至归零的完整教程

轻墨酱_7804

轻墨酱_7804

发布时间:2026-02-18 13:28:16

|

970人浏览过

|

来源于php中文网

原创

Java中实现列表间循环减法直至归零的完整教程

本文详解如何用java对两个数字列表执行循环减法操作:以第一个列表中的每个数为起点,依次减去第二个列表中的元素(循环取值),直到该数减至零或负数,并实时输出每一步运算过程。

本文详解如何用java对两个数字列表执行循环减法操作:以第一个列表中的每个数为起点,依次减去第二个列表中的元素(循环取值),直到该数减至零或负数,并实时输出每一步运算过程。

在实际业务场景中(如库存分批扣减、任务额度分配、资源轮询消耗等),常需将一组基准数值(如初始配额)按固定规则逐次减去另一组操作值(如每次消耗量),且当操作值用尽时自动循环复用——这正是“循环减法直至归零”问题的核心需求。与简单遍历相减不同,本方案强调状态延续性和过程可视化:每个基准值独立计算,每步减法均需打印算式,且第二个列表需支持无限循环索引。

✅ 正确实现逻辑

关键在于引入指针变量 ptr 管理第二个列表(listB)的当前访问位置,并使用取模运算 ptr = (ptr + 1) % listB.size() 实现安全循环。外层遍历第一个列表(listA)的每个元素 a,内层 while (a > 0) 持续执行减法,直到 a 被耗尽(≤ 0)为止。

以下是完整、可运行的 Java 示例代码:

import java.util.*;

public class CircularSubtraction {
    public static void main(String[] args) {
        List<Integer> listA = Arrays.asList(10, 9);
        List<Integer> listB = Arrays.asList(1, 2, 3, 4, 5, 4);

        for (int a : listA) {
            int ptr = 0; // 指向 listB 的当前索引
            int remaining = a; // 当前待减数值(避免修改原循环变量)

            while (remaining > 0 && !listB.isEmpty()) {
                int b = listB.get(ptr);
                int result = remaining - b;
                System.out.println(remaining + " - " + b + " = " + result);
                remaining = result;
                ptr = (ptr + 1) % listB.size(); // 循环切换到下一个元素
            }
            // 当 remaining <= 0 时退出循环,无需额外处理
        }
    }
}

输出结果:

Java 接口排错助手
Java 接口排错助手

在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。

下载

立即学习“Java免费学习笔记(深入)”;

10 - 1 = 9
9 - 2 = 7
7 - 3 = 4
4 - 4 = 0
9 - 1 = 8
8 - 2 = 6
6 - 3 = 3
3 - 4 = -1

⚠️ 注意:示例中第二组计算(以 9 开始)因 listB 循环继续,实际按 [1,2,3,4,5,4] 顺序循环取值,故结果与提问中“期望输出”略有差异——提问示例隐含了重置 listB 起始位置的逻辑(即每次 a 开始时都从 listB[0] 减起),但未明确说明是否允许跨 a 共享 ptr 状态。本实现采用每个 a 独立循环,更符合常规语义;若需严格匹配提问示例(即 9 的减法从 listB[4] 即 5 开始),则需额外维护全局 ptr 并在每次 a 计算后不重置——此时应将 ptr 提升为外层变量。

? 关键注意事项

  • 空列表防护:务必检查 listB 是否为空,否则 get(ptr) 将抛出 IndexOutOfBoundsException;
  • 整数溢出风险:若 listB 元素全为负数,while (remaining > 0) 将陷入死循环,建议增加最大迭代次数限制(如 int maxSteps = 10000);
  • 不可变性考量:原始代码中直接修改循环变量 a 是危险实践(虽 Java 中 int 是值传递,不影响外层,但可读性差),推荐使用临时变量(如 remaining);
  • 性能提示:该算法时间复杂度为 O(N × M)(N 为 listA 长度,M 为达到归零所需 listB 访问次数),无更优解——因为每一步减法过程本身即业务要求,无法跳过。

✅ 总结

循环减法归零问题本质是带状态的迭代模拟,核心在于用指针 + 取模实现安全循环,用 while 控制单个数值的生命周期。它不追求数学最优化,而强调过程透明与业务可追溯。掌握此模式后,可轻松扩展至带条件跳过(如跳过零值)、记录消耗路径、或对接数据库事务日志等进阶场景。

热门AI工具

更多
超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

354

2023.09.25

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6899

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3305

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4308

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2925

2025.08.29

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

379

2026.04.23

java值传递和引用传递有什么区别
java值传递和引用传递有什么区别

java值传递和引用传递的区别:1、基本数据类型的传递;2、对象的传递;3、修改引用指向的情况。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

166

2024.02.23

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

6476

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn