为何使用return无法保存String类型的输入变量?
修复agregarMain方法的输入处理问题
原代码存在的问题:
- 字符串空值判断错误:Java中用
==比较字符串是对比对象引用,不是内容,判断空字符串应该用isEmpty()或equals("")。 - 方法存在编译错误:编译器会提示"缺少返回语句",因为for循环的逻辑路径虽然实际会一直执行直到输入有效,但编译器无法确定,要求方法必须在所有路径都有返回值。
- 循环结构不直观:用
for (int i = 0; i < 1; i++)配合i--实现重复输入,代码可读性差,不如用专门的循环结构。
修正后的代码:
public static String agregarMain() { Scanner in = new Scanner(System.in); String mainSeleccion; // 循环直到输入有效内容 do { System.out.println("Ingresar nombre del software/topico"); mainSeleccion = in.nextLine(); if (mainSeleccion.isEmpty()) { System.out.println("Invalid Selection, please try again"); } } while (mainSeleccion.isEmpty()); in.close(); // 关闭Scanner释放资源 return mainSeleccion; }
修正说明:
- 将
mainSeleccion声明在循环外部,确保变量在方法整个作用域内可用,返回时无作用域问题。 - 用
isEmpty()正确判断空字符串,避免引用对比的错误。 - 改用
do-while循环,清晰表达"先输入一次,再检查是否有效,无效则重复"的逻辑,代码更易维护。 - 添加
in.close()关闭Scanner资源,遵循资源管理的良好实践。
内容的提问来源于stack exchange,提问作者Floatingunknown
相关产品推荐
相关产品推荐

