Java中使用函数实现线性搜索的报错问题求助
问题分析与解决方案
你的代码主要存在变量作用域混淆、方法调用语法错误、数组越界以及main方法规范错误这几个问题,以下是修正后的完整代码,同时保留输入逻辑与main分离的需求:
import java.util.Scanner; class prg { private Scanner sc = new Scanner(System.in); private int len, num; private int[] arr; private int x; void input() { System.out.println("Enter the size of the array: "); // 直接赋值给成员变量,避免重新定义局部变量覆盖 len = sc.nextInt(); arr = new int[len]; System.out.println("Enter the Array: "); // 数组索引范围是0到len-1,用i < len避免越界 for (int i = 0; i < len; i++) { arr[i] = sc.nextInt(); } System.out.println("Enter the number to look for: "); num = sc.nextInt(); sc.close(); // 关闭Scanner释放资源 } int linear(int len, int[] arr, int num) { // 修正循环条件,避免数组越界 for (int i = 0; i < len; i++) { if (arr[i] == num) { return i; } } return -1; } // Java程序入口main方法必须遵循public static void main(String[] args)规范 public static void main(String[] args) { prg obj = new prg(); obj.input(); // 调用方法时数组参数直接传变量名,不需要加[] obj.x = obj.linear(obj.len, obj.arr, obj.num); if (obj.x >= 0) { System.out.println("The number " + obj.num + " is found at the index: " + obj.x); } else { System.out.println("The number " + obj.num + " was not found"); } } }
关键修改说明
- 变量作用域修正:
input方法中直接给类的成员变量len、arr、num赋值,不再重新定义同名局部变量,确保输入的数据能被类内其他方法访问。 - 方法调用语法修正:调用
linear时,数组参数直接写变量名arr即可,错误写法arr[]会被编译器识别为类型而非变量,导致参数不匹配。 - 数组越界修复:遍历数组的循环条件改为
i < len,因为数组索引从0开始,最大有效索引是len-1,i <= len会访问不存在的索引引发异常。 - main方法规范:Java的程序入口方法必须是
public static void main(String[] args),否则JVM无法识别并启动程序。
另外,如果你想让linear方法直接访问类内的数组arr,可以简化方法参数,不用传递数组、长度和目标值,直接使用成员变量:
int linear() { for (int i = 0; i < len; i++) { if (arr[i] == num) { return i; } } return -1; }
此时main里的调用简化为obj.x = obj.linear();,代码更简洁,同样能实现需求。
内容的提问来源于stack exchange,提问作者Neal
相关产品推荐
相关产品推荐

