Java二维数组与方法代码无输出问题排查求助
问题分析:Java查找电话号码程序无正确输出的原因
核心问题:输入解析逻辑完全错误
你的输入格式是姓名,电话号码(比如Joe,123-5432),但代码里用Scanner.next()读取内容——这个方法默认按**空白字符(空格、换行)**分割输入,导致实际存储的数据完全不符合预期:
- 第一次循环时,
list[0][0]会被赋值为Joe,123-5432(而不是Joe),list[0][1]被赋值为Linda,983-4123(而不是123-5432) - 第二次循环时,
list[1][0]是Frank,867-5309,list[1][1]是Frank - 第三次循环时,程序会因为没有足够的输入而阻塞,根本执行不到后续的查找和打印步骤,这就是你看到“无输出”的原因。
修复方案
调整输入读取逻辑,正确处理逗号分隔的格式:
import java.util.Scanner; public class LabProgram { public static String getPhoneNumber(String[][] list, String name) { for (int i = 0; i < list.length; i++) { if (list[i][0].equals(name)) { return list[i][1]; } } return "-1"; // 姓名未找到时返回-1 } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int numPairs = scnr.nextInt(); scnr.nextLine(); // 跳过nextInt()遗留的换行符,避免读取空行 String[][] list = new String[numPairs][2]; for (int i = 0; i < numPairs; i++) { String line = scnr.nextLine().trim(); // 读取整行输入 String[] parts = line.split(","); // 按逗号分割姓名和电话 list[i][0] = parts[0].trim(); // 提取并清除姓名的多余空格 list[i][1] = parts[1].trim(); // 提取并清除电话的多余空格 } String name = scnr.nextLine().trim(); // 读取要查找的姓名 String phoneNumber = getPhoneNumber(list, name); System.out.println(name + ": " + phoneNumber); } }
测试输入示例
按以下格式输入(每组占一行):
3 Joe,123-5432 Linda,983-4123 Frank,867-5309 Frank
程序会正确输出:Frank: 867-5309
兼容原始一行输入的处理
如果坚持使用你最初的一行输入格式(3 Joe,123-5432 Linda,983-4123 Frank,867-5309 Frank),可以修改main方法的输入部分为:
int numPairs = scnr.nextInt(); scnr.nextLine(); // 跳过换行符 String allInput = scnr.nextLine(); String[] tokens = allInput.split(" "); for (int i = 0; i < numPairs; i++) { String[] parts = tokens[i].split(","); list[i][0] = parts[0].trim(); list[i][1] = parts[1].trim(); } String name = tokens[numPairs].trim();
内容的提问来源于stack exchange,提问作者TRE
相关产品推荐
相关产品推荐

