Java二维数组搜索方法异常:if与else语句均执行问题排查
Java二维数组搜索方法的问题修复
问题现象
- 输入第一行存在的有效姓名时,找到对应数据的同时,会额外执行else语句输出“Nothing found. Try Again”
- 输入第二行存在的有效姓名时,会先输出“Nothing found. Try Again”,再显示正确的搜索结果
问题根源
原findData方法的逻辑错误:
- 遍历数组时,每一行不匹配就立刻提示“没找到”并要求重新输入,而非遍历完所有行再判断是否存在匹配项
- 找到匹配项后未终止循环,会继续遍历后续行,后续行不匹配时触发else语句,导致多余提示
修复后的代码
import java.util.Scanner; static Scanner scan = new Scanner(System.in); public static void main(String[] args) { System.out.println("==== Family Affair ===="); System.out.println("How many members will you add?"); int number = scan.nextInt(); scan.nextLine(); // 处理nextInt后的换行符残留 String[][] familyData = new String[number][2]; for (int i = 0; i < familyData.length; i++) { System.out.print("\tName: "); familyData[i][0] = scan.nextLine(); System.out.print("\tState: "); familyData[i][1] = scan.nextLine(); System.out.println(" "); } System.out.println(" "); printData(familyData); findData(familyData); } public static void printData(String[][] data) { for (int i = 0; i < data.length; i++) { System.out.print("\tName: " + data[i][0] + " "); System.out.print("\tState: " + data[i][1] + " "); System.out.println(" "); } } public static String[] findData(String[][] data) { while (true) { System.out.println("SEARCH..."); System.out.println("First Name: "); String name = scan.nextLine(); boolean found = false; String[] resultData = null; // 先完整遍历所有行,查找匹配项 for (int i = 0; i < data.length; i++) { if (name.equals(data[i][0])) { System.out.println("--- Search Results ---"); System.out.println("\tName: " + data[i][0]); System.out.println("\tState: " + data[i][1]); found = true; resultData = new String[]{data[i][0], data[i][1]}; break; // 找到后立刻终止遍历 } } // 遍历完所有行后判断是否找到 if (found) { return resultData; // 返回找到的数据 } else { System.out.println("Nothing found. Try Again"); // 可按需添加退出逻辑: // System.out.println("Enter 'q' to quit, or press enter to try again:"); // String choice = scan.nextLine(); // if (choice.equalsIgnoreCase("q")) { // return null; // } } } }
修复要点
- 改用
while(true)实现持续搜索(可按需添加退出逻辑) - 先完整遍历数组一次,用
found标记是否找到匹配项 - 找到匹配项后用
break终止遍历,避免后续无效循环 - 遍历结束后统一判断是否找到,再决定输出提示或返回结果
- 实际返回找到的用户数据,而非空数组,提升方法实用性
内容的提问来源于stack exchange,提问作者Gregory Banks
相关产品推荐
相关产品推荐

