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

Java如何匹配原数组与乱序数组 关联感染者ID及其接触者

实现方案

核心逻辑

公民ID是从0开始递增的连续序列,和数组下标天然一一对应。只要把每个公民随机生成的接触者ID存入同长度的数组,查询ID为n的公民接触者时,直接取数组下标为n的元素即可,不需要额外做遍历匹配。

修改点

  • 新增长度与公民总数一致的接触者数组,生成随机接触者时同步存入数组对应下标位置,不要只打印不存储
  • 删除原代码中重复的公民总数输入逻辑,改为接收用户输入的感染者ID
  • 增加ID合法性校验:输入ID小于0或大于等于公民总数时,提示输入非法
  • 校验通过后直接通过数组下标取出对应接触者ID输出即可

可运行完整代码

import java.util.Scanner;
public class ContagionControl {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please Enter the Number of Citizens: ");
        int citizenCount = input.nextInt();
        // 下标对应当前公民ID,存储值为该公民的接触者ID
        int[] contacteeArr = new int[citizenCount];

        // 打印公民ID表头
        System.out.printf("%8s", "Id");
        for (int i = 0; i < citizenCount; i++) {
            System.out.printf("%4d", i);
        }
        System.out.println();

        // 生成随机接触者、存入数组并打印
        System.out.printf("%8s", "Cantactee");
        for (int i = 0; i < citizenCount; i++) {
            int contacteeId = (int) (Math.random() * citizenCount);
            contacteeArr[i] = contacteeId;
            System.out.printf("%4d", contacteeId);
        }
        System.out.println();

        // 接收感染者ID
        System.out.println("Please Enter the Infected Citizen ID:");
        int infectedId = input.nextInt();

        // 校验ID范围
        if (infectedId < 0 || infectedId >= citizenCount) {
            System.out.println("Error: Invalid citizen ID");
            input.close();
            return;
        }

        // 匹配并输出结果
        System.out.printf("Contactee of infected citizen %d: %d", infectedId, contacteeArr[infectedId]);
        input.close();
    }
}

扩展说明

如果后续需求调整为一个公民对应多个接触者,只需将接触者数组的元素类型改为ArrayList<Integer>存储多个接触者ID即可,核心的下标匹配逻辑不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:15:42