如何在函数中创建并管理多个类实例以进行跨调用比较

发布时间 - 2026-01-29 00:00:00    点击率:

本文介绍如何在java中通过集合(如arraylist)持久化保存每次函数调用生成的内部类对象,并在所有调用结束后统一比较各对象的字段值(如battery差值),从而筛选并输出满足条件(如相邻电池值差>1)的记录。

要实现跨多次函数调用对用户输入的 battery 值进行差值判断(例如:检测相邻两次输入的 battery 差是否大于 1),关键在于打破单次调用的作用域限制——不能仅在 func() 内部创建局部对象后就丢弃,而需将每次创建的对象长期存储、集中管理

✅ 正确做法:使用 List 保存历史对象

首先,修正命名规范(Java约定:类名首字母大写)——将内部类 in 改为 Inner;同时,将对象容器声明为类成员变量(如 List),确保其生命周期覆盖全部 func() 调用:

import java.util.*;

public class Out {
    private Scanner sc = new Scanner(System.in);
    private List history = new ArrayList<>(); // 存储所有 Inner 实例

    // 内部类:建议定义为 static(若不依赖外部类实例状态),此处保留非 static 亦可
    class Inner {
        int battery;
        int time;
        Inner(int battery, int time) {
            this.battery = battery;
            this.time = time;
        }
    }

    public void func() {
        System.out.print("Enter battery and time: ");
        int battery = sc.nextInt();
        int time = sc.nextInt();
        history.add(new Inner(battery, time)); // 每次都存入列表
    }

    // 新增方法:执行比较与输出逻辑
    public void analyze() {
        if (history.size() < 2) {
            System.out.println("At least two entries required for comparison.");
            return;
        }

        // 遍历相邻元素对:第0&1、1&2、2&3...
        for (int i = 0; i < history.size() - 1; i++) {
            int diff = Math.abs(history.get(i).battery - history.get(i + 1).battery);
            if (diff > 1) {
                Inner current = history.get(i);
                System.out.printf("Alert: Battery %d (at time %d) differs by >1 from next entry.\n", 
                                 current.ba

ttery, current.time); } } } // 示例主流程(演示4次调用) public static void main(String[] args) { Out out = new Out(); // 模拟4次输入 out.func(); // 98, 2 out.func(); // 97, 4 out.func(); // 95, 9 out.func(); // 94, 11 out.analyze(); // 输出符合条件的记录 } }

⚠️ 注意事项与优化建议

  • 避免非静态内部类的隐式引用开销:若 Inner 不需要访问 Out 的实例成员,建议改为 static class Inner,防止意外持有外部类引用导致内存泄漏。
  • 输入健壮性:生产代码中应加入 sc.hasNextInt() 校验,防止 InputMismatchException。
  • 扩展性考虑:如需支持“全局最大差值”或“所有差值>1的组合”,可改用双重循环或流式处理(history.stream()....)。
  • 线程安全:若多线程并发调用 func(),需同步 history.add(...) 操作(如用 Collections.synchronizedList(...) 或 CopyOnWriteArrayList)。

通过将对象统一纳入集合管理,你不仅解决了跨调用比较问题,还为后续统计、排序、持久化等操作打下基础——这是面向对象设计中“状态聚合”思想的典型实践。


# java  # ai  # stream  # 作用域  # red  # Static  # 面向对象  # 成员变量  # 循环  # class  # 线程  # 多线程  # 并发  # 对象  # history  # 这是  # 不需要  # 遍历  # 两次  # 并在  # 每次都  # 如需  # 亦可  # 若不  # 还为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  python中快速进行多个字符替换的方法小结  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel如何处理CORS跨域请求?(配置示例)  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  ,怎么在广州志愿者网站注册?  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel如何生成URL和重定向?(路由助手函数)  如何快速辨别茅台真假?关键步骤解析  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  高端网站建设与定制开发一站式解决方案 中企动力  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  深圳网站制作的公司有哪些,dido官方网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何在Ubuntu系统下快速搭建WordPress个人网站?  Python文本处理实践_日志清洗解析【指导】  Laravel如何发送系统通知?(Notification渠道示例)  ,在苏州找工作,上哪个网站比较好?  浅谈Javascript中的Label语句  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  java中使用zxing批量生成二维码立牌  七夕网站制作视频,七夕大促活动怎么报名?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  JS经典正则表达式笔试题汇总  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  韩国服务器如何优化跨境访问实现高效连接?  利用vue写todolist单页应用  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何在 Pandas 中基于一列条件计算另一列的分组均值  实现点击下箭头变上箭头来回切换的两种方法【推荐】  ,交易猫的商品怎么发布到网站上去?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何用AWS免费套餐快速搭建高效网站?