如何在函数中创建并管理多个类实例以进行跨调用比较
发布时间 - 2026-01-29 00:00:00 点击率:次本文介绍如何在java中通过集合(如arraylist)持久化保存每次函数调用生成的内部类对象,并在所有调用结束后统一比较各对象的字段值(如battery差值),从而筛选并输出满足条件(如相邻电池值差>1)的记录。
要实现跨多次函数调用对用户输入的 battery 值进行差值判断(例如:检测相邻两次输入的 battery 差是否大于 1),关键在于打破单次调用的作用域限制——不能仅在 func() 内部创建局部对象后就丢弃,而需将每次创建的对象长期存储、集中管理。
✅ 正确做法:使用 List 保存历史对象
首先,修正命名规范(Java约定:类名首字母大写)——将内部类 in 改为 Inner;同时,将对象容器声明为类成员变量(如 List
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免费套餐快速搭建高效网站?


