编程新手求助:数组线性搜索的函数传参与输入传递问题
解决线性搜索的代码问题
你的代码存在几个关键问题,下面逐一修正并解释:
1. 无法传递takeInput中的x
你的takeInput方法只能返回数组,没法同时返回读取到的目标值x。可以通过自定义简单数据类封装数组和目标值,或者直接在main方法中分步读取输入(更适合新手)。
2. linearSearch方法设计错误
线性搜索的核心是返回目标元素的索引位置(找到时),未找到则返回-1,而非返回原数组。另外你的方法缺少未找到时的默认返回值,会导致编译报错。
3. main方法未执行任何逻辑
需要在main里调用输入方法、搜索方法,并输出最终结果。
修改后的完整代码
import java.util.Scanner; public class LinearSearchDemo { // 线性搜索:返回目标元素的索引,未找到返回-1 public static int linearSearch(int arr[], int x) { for (int i = 0; i < arr.length; i++) { if (arr[i] == x) { return i; // 返回找到的索引 } } return -1; // 未找到返回-1 } // 读取输入:返回封装了数组和目标值的对象 public static InputData takeInput() { Scanner s = new Scanner(System.in); InputData data = new InputData(); System.out.print("请输入数组长度:"); int N = s.nextInt(); data.array = new int[N]; System.out.print("请输入要搜索的目标数字:"); data.target = s.nextInt(); System.out.print("请输入数组的" + N + "个元素:"); for (int i = 0; i < N; i++) { data.array[i] = s.nextInt(); } return data; } // 封装输入数据的内部类 static class InputData { int[] array; int target; } public static void main(String[] args) { // 获取输入数据 InputData input = takeInput(); // 执行线性搜索 int resultIndex = linearSearch(input.array, input.target); // 输出结果 if (resultIndex != -1) { System.out.println("目标数字在数组中的索引位置是:" + resultIndex); } else { System.out.println("数组中未找到目标数字"); } } }
简化版(无需自定义类)
如果觉得自定义类太复杂,也可以把输入逻辑直接写在main里:
import java.util.Scanner; public class LinearSearchDemo { public static int linearSearch(int arr[], int x) { for (int i = 0; i < arr.length; i++) { if (arr[i] == x) { return i; } } return -1; } public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入数组长度:"); int N = s.nextInt(); int[] arr = new int[N]; System.out.print("请输入要搜索的目标数字:"); int x = s.nextInt(); System.out.print("请输入数组的" + N + "个元素:"); for (int i = 0; i < N; i++) { arr[i] = s.nextInt(); } int resultIndex = linearSearch(arr, x); if (resultIndex != -1) { System.out.println("目标数字在数组中的索引位置是:" + resultIndex); } else { System.out.println("数组中未找到目标数字"); } } }
内容的提问来源于stack exchange,提问作者Utsav
相关产品推荐
相关产品推荐

