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

Java线性与二分搜索类测试异常求助:主类调用问题排查

测试问题修正方案

针对你遇到的MainTester测试报错问题,核心问题和修正方案如下:

问题根源

  • MainTester类没有实例化Search类并调用其方法,反而自己写了空实现的搜索方法,导致实际没用到你写的Search类逻辑
  • 二分搜索依赖已排序数组,你当前使用的未排序数组会导致算法逻辑失效
  • 主类中混入了Sorting类的测试代码,干扰了搜索结果的正常输出

修正后的完整代码

1. 确保Search类的正确实现(如果你的代码没问题可以直接复用)

public class Search {
    // 线性搜索:遍历数组查找目标值,找到返回索引,否则返回-1
    public int linearSearch(int[] arr, int target) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == target) {
                return i;
            }
        }
        return -1;
    }

    // 二分搜索:仅支持已排序数组,找到返回索引,否则返回-1
    public int binarySearch(int[] sortedArr, int target) {
        int left = 0;
        int right = sortedArr.length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2; // 避免整数溢出问题
            if (sortedArr[mid] == target) {
                return mid;
            } else if (sortedArr[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
}

2. 修正后的MainTester类

import java.util.Scanner;

public class MainTester {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 实例化你写的Search类,这是调用正确方法的核心
        Search searchInstance = new Search();

        // 测试线性搜索
        int[] linearTestArr = {5, 2, 9, 1, 5, 6};
        System.out.print("输入线性搜索的关键字:");
        int linearTarget = scanner.nextInt();
        int linearResult = searchInstance.linearSearch(linearTestArr, linearTarget);
        System.out.println("线性搜索结果:" + (linearResult == -1 ? "未找到该关键字" : "关键字索引为" + linearResult));

        // 测试二分搜索:必须使用已排序的数组
        int[] binaryTestArr = {1, 2, 5, 5, 6, 9};
        System.out.print("输入二分搜索的关键字:");
        int binaryTarget = scanner.nextInt();
        int binaryResult = searchInstance.binarySearch(binaryTestArr, binaryTarget);
        System.out.println("二分搜索结果:" + (binaryResult == -1 ? "未找到该关键字" : "关键字索引为" + binaryResult));

        scanner.close();
    }
}

关键修正说明

  • 移除主类内的空搜索方法:直接通过Search searchInstance = new Search()创建实例,调用你在Search类中实现好的搜索方法,这是解决调用错误的核心
  • 二分搜索使用已排序数组:二分搜索的算法逻辑基于数组有序的前提,未排序数组会导致无法正确定位目标,所以必须传入升序(或对应调整逻辑的降序)数组
  • 清理冗余代码:删除MainTester中属于Sorting类的测试代码,避免输出混乱,确保只保留搜索功能的测试逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:21:02