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

Java实现线性搜索时如何返回数组中目标值的所有匹配索引?

问题原因

你当前编写的linearSearch方法逻辑为:遍历数组时只要找到第一个匹配目标值的元素,就会立即return终止方法并返回当前索引,因此只能返回第一个匹配位置,无法收集所有符合要求的索引。

解决思路

调整方法逻辑,先收集所有匹配的索引再统一处理输出,改动点如下:

  1. 将linearSearch的返回值类型从单值int改为List<Integer>,用于存储所有匹配到的索引
  2. 遍历数组过程中不提前返回,每匹配到一个目标值就将对应索引存入列表
  3. 主方法中对返回的索引列表做格式化处理:只有一个索引直接输出,多个索引用and连接,无匹配则输出-1

完整修改后代码

import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Q6 {
    public static void main(String[] args) {
        Random random = new Random();
        int target = random.nextInt(10);
        // 这里固定数组长度为6和你给出的示例对齐,可按需修改为其他值
        int[] array = createRandomIntArray(6);
        System.out.println(Arrays.toString(array));
        
        List<Integer> matchIndexes = linearSearch(array, target);
        // 按要求格式化输出
        if (matchIndexes.isEmpty()) {
            System.out.println(target + " is found at index: -1");
        } else if (matchIndexes.size() == 1) {
            System.out.println(target + " is found at index: " + matchIndexes.get(0));
        } else {
            StringBuilder outputSb = new StringBuilder();
            for (int i = 0; i < matchIndexes.size(); i++) {
                if (i == matchIndexes.size() - 1) {
                    outputSb.append("and ").append(matchIndexes.get(i));
                } else {
                    outputSb.append(matchIndexes.get(i)).append(" ");
                }
            }
            System.out.println(target + " is found at index: " + outputSb);
        }
    }

    public static int[] createRandomIntArray(int n) {
        Random random = new Random();
        int[] result = new int[n];
        for (int i = 0; i < result.length; i++) {
            result[i] = random.nextInt(10);
        }
        return result;
    }

    public static List<Integer> linearSearch(int[] array, int target) {
        List<Integer> indexList = new ArrayList<>();
        for (int i = 0; i < array.length; i++) {
            if (array[i] == target) {
                indexList.add(i);
            }
        }
        return indexList;
    }
}

示例输出

[6, 3, 9, 2, 7, 6]
6 is found at index: 0 and 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:21:01