Java姓名输入程序问题:无法按指定条件终止的修复请求
修复全名输入程序的终止与验证逻辑
你的代码目前存在几个核心问题,导致无法正确触发终止条件:
- 没有区分有效姓名和无效输入,不管输入是否符合要求,都直接让计数器
i递增并存入数组,无效输入也占用了10个名额的位置 - 循环条件只判断了
i<10,完全没处理用户输入fim且有效姓名≥5个时的终止逻辑 - 输入
fim时没有先检查有效姓名数量是否达标,还错误地把fim也存进了姓名数组里
下面是修复后的完整代码,我会在后面解释关键改进点:
import java.util.Scanner; public class FullNameInput { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); System.out.println("Enter up to 10 full names with up to 120 characters and at least two names with at least 4 characters: "); System.out.println("(Enter 'fim' to stop early once you've entered at least 5 valid names)"); String[] validFullNames = new String[10]; int validCount = 0; // 单独统计有效姓名的数量 while (validCount < 10) { String input = keyboard.nextLine().trim(); // 处理终止条件:输入fim且有效姓名≥5 if (input.equalsIgnoreCase("fim")) { if (validCount >= 5) { System.out.println("Program terminated early by user."); break; } else { System.out.println("You need at least 5 valid names to terminate early."); continue; } } // 验证姓名有效性 boolean isValid = false; if (input.length() <= 120) { String[] separatedNames = input.split("\\s+"); // 用\\s+处理多个空格的情况 int longNameCount = 0; for (String part : separatedNames) { if (part.length() >= 4) { longNameCount++; } } if (longNameCount >= 2) { isValid = true; } } if (isValid) { validFullNames[validCount] = input; validCount++; System.out.println("Added valid name (" + validCount + "/10)"); } else { System.out.println("'" + input + "' is an invalid name. Please try again."); } } // 循环结束后输出结果(可选) System.out.println("\nFinal list of valid names:"); for (int i = 0; i < validCount; i++) { System.out.println((i+1) + ". " + validFullNames[i]); } keyboard.close(); } }
关键改进说明:
- 单独统计有效姓名:用
validCount变量专门记录符合要求的姓名数量,无效输入不会占用数组位置,也不会影响终止条件的判断 - 正确处理
fim终止逻辑:先判断输入是否为fim,再检查当前有效姓名是否≥5,达标才终止,不达标则提示用户继续输入 - 优化验证逻辑:
- 使用
trim()处理输入前后的空格,避免空输入干扰 - 用
\\s+作为分隔符,支持姓名中间有多个空格的情况 - 先判断总长度≤120,再统计长度≥4的子姓名数量,逻辑更清晰
- 使用
- 自动终止条件:当
validCount达到10时,循环自动结束,符合需求
这样你的程序就能完全满足需求:最多存储10个有效姓名,满5个后输入fim可提前终止,满10个自动终止,同时严格验证每个输入的有效性。
内容的提问来源于stack exchange,提问作者Ruca
相关产品推荐
相关产品推荐

