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

如何实现每90分钟更新时间?及Java树形结构代码问题咨询

嘿,我来帮你搞定这两个技术问题:

问题1:实现每90分钟自动更新一次时间

在Java里,最可靠的方式是用ScheduledExecutorService来实现定时任务,比传统的Timer更稳定,能更好地处理线程池相关的场景。这里给你一个简单的实现示例:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.time.LocalDateTime;

public class TimeUpdater {
    public static void main(String[] args) {
        // 创建单线程调度池,保证任务顺序执行
        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        
        // 定义时间更新任务
        Runnable updateTask = () -> {
            LocalDateTime currentTime = LocalDateTime.now();
            System.out.println("当前时间已更新:" + currentTime);
            // 这里可以替换成你实际需要的更新逻辑,比如刷新界面时间、同步服务器时间等
        };
        
        // 立即执行第一次任务,之后每90分钟重复执行
        scheduler.scheduleAtFixedRate(
            updateTask,
            0, // 初始延迟0秒,马上启动第一次
            90, // 后续每次间隔90分钟
            TimeUnit.MINUTES
        );
    }
}

几点实用说明:

  • 如果你的更新任务可能耗时超过90分钟,建议改用scheduleWithFixedDelay,它会在上一次任务结束后再等待90分钟执行下一次,避免任务重叠。
  • 程序关闭时记得调用scheduler.shutdown()关闭线程池,避免资源泄漏。
问题2:Java树形结构代码指导

先拆解下你的代码逻辑:你正在构建一个四叉树(每个父节点对应4个子节点),输入层级数index后初始化每一层的节点索引,然后输入某个节点的索引,想要回溯它到根节点的路径对吧?我帮你补全代码并做了优化:

补全优化后的完整代码

import java.util.Scanner;

public class QuadTreeDemo {
    public static void main(String[] args) {
        int[][] K;
        int nodeCount = 1;
        int targetLevel;

        System.out.println("Levels:");
        // 使用try-with-resources自动关闭Scanner,避免资源泄漏
        try (Scanner reader = new Scanner(System.in)) {
            targetLevel = reader.nextInt();
            
            // 动态初始化数组,适配任意层级输入
            K = new int[targetLevel + 1][];
            for (int level = 0; level <= targetLevel; level++) {
                K[level] = new int[nodeCount];
                for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++) {
                    K[level][nodeIndex] = nodeIndex;
                }
                nodeCount *= 4; // 下一层节点数是当前的4倍
            }

            System.out.println("Node index:");
            int targetNode = reader.nextInt();

            // 回溯打印从目标节点到根节点的路径
            System.out.println("从节点" + targetNode + "到根节点的路径:");
            System.out.print(targetNode);
            for (int level = targetLevel - 1; level >= 0; level--) {
                targetNode = targetNode / 4; // 四叉树父节点索引=子节点索引/4(整数除法自动取整)
                System.out.print(" -> " + targetNode);
            }
        }
    }
}

关键优化点和逻辑说明

  1. 动态数组适配:你原来固定了数组大小int[][] K = new int[3][16];,如果输入的层级超过2会直接数组越界,改成动态创建后,不管输入多少层级都能正常运行。
  2. 资源安全处理:用try-with-resources包裹Scanner,不用手动调用close(),避免忘记关闭导致的资源泄漏。
  3. 父节点计算逻辑:四叉树中每个父节点对应4个子节点,所以子节点targetNode的父节点索引就是targetNode / 4(整数除法自动取整),比如子节点0-3的父节点都是0,4-7的父节点都是1,以此类推。
  4. 路径可视化:循环从目标节点所在层级往上遍历到根节点,把路径打印出来,清晰展示节点的层级关系。

如果你的需求不是回溯父节点,而是其他操作(比如查找子节点、修改节点值),可以随时告诉我,我再帮你调整~

内容的提问来源于stack exchange,提问作者Ji Young Park

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:04:19