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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:59