You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中比较类对象的电池值,实现差值超1时的打印逻辑?

解决方案代码与说明

首先修正你现有代码中的语法错误,然后通过维护一个前次输入记录对象和首次输入标记,实现无内存浪费的相邻值比较逻辑,具体实现如下:

import java.util.Scanner;

public class Out {
    Scanner sc = new Scanner(System.in);
    // 标记首次输入,避免初始默认值(0,0)干扰判断
    private boolean isFirstInput = true;

    class In { // 内部类名首字母大写,符合Java命名规范
        int x;
        int y;

        In(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }

    In obj = new In(0, 0);

    public void func() {
        int battery = sc.nextInt();
        int time = sc.nextInt();
        In inner = new In(battery, time);

        // 跳过首次输入与默认值的无效比较
        if (!isFirstInput) {
            // 计算相邻电池值的绝对差值
            if (Math.abs(obj.x - inner.x) > 1) {
                System.out.println("前一次电池值:" + obj.x + ",对应时间:" + obj.y);
            }
        } else {
            isFirstInput = false;
        }
        // 更新记录为当前输入的对象,作为下一次比较基准
        obj = inner;
    }
}

核心逻辑说明

  • 首次输入处理:通过isFirstInput标记跳过初始默认值(0,0)与第一次用户输入的无效比较,避免误触发打印;
  • 差值判断:非首次输入时,计算前次记录电池值与当前输入电池值的绝对差值,若大于1则打印前次的电池值和对应时间;
  • 内存控制:全程仅维护两个内部类对象(obj和每次临时创建的inner),每次调用func()后inner会被自动回收,完全避免集合类带来的内存占用问题;
  • 语法修正:修复了原代码中Scanner声明缺分号、内部类成员变量定义格式错误的问题,同时调整内部类名称为In(符合Java命名规范,避免与关键字混淆)。

示例测试验证

按照你给出的输入序列:

  1. 输入98 2:首次输入,直接更新obj为(98,2),无输出;
  2. 输入97 4:差值为1,不触发打印,更新obj为(97,4);
  3. 输入95 9:差值为2>1,打印前一次电池值:97,对应时间:4,更新obj为(95,9);
  4. 输入94 11:差值为1,不触发打印,更新obj为(94,11)。

完全符合需求预期。

内容的提问来源于stack exchange,提问作者Anchal Dobriyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:37:45