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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:15:15