Java实现线性搜索时如何返回数组中目标值的所有匹配索引?
问题原因
你当前编写的linearSearch方法逻辑为:遍历数组时只要找到第一个匹配目标值的元素,就会立即return终止方法并返回当前索引,因此只能返回第一个匹配位置,无法收集所有符合要求的索引。
解决思路
调整方法逻辑,先收集所有匹配的索引再统一处理输出,改动点如下:
- 将
linearSearch的返回值类型从单值int改为List<Integer>,用于存储所有匹配到的索引 - 遍历数组过程中不提前返回,每匹配到一个目标值就将对应索引存入列表
- 主方法中对返回的索引列表做格式化处理:只有一个索引直接输出,多个索引用
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
相关产品推荐
相关产品推荐

