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
相关产品推荐
相关产品推荐

