0

0

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

霞舞

霞舞

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

|

950人浏览过

|

来源于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 时退出循环,无需额外处理
        }
    }
}

输出结果:

LOGO.com
LOGO.com

在线生成Logo,100%免费

下载

立即学习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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

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

103

2023.09.25

string转int
string转int

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

770

2023.08.02

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

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

572

2024.08.29

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

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

254

2025.08.29

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

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

210

2025.08.29

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

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

108

2024.02.23

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

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

455

2023.08.14

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

373

2023.06.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.6万人学习

C# 教程
C# 教程

共94课时 | 9.6万人学习

Java 教程
Java 教程

共578课时 | 67.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号