Java中调用output方法遇阻,请求代码问题排查与修正
代码问题修复及说明
原代码存在的核心问题
- age方法死循环:方法最后
return age();是无限递归调用自身,永远不会返回实际年龄,而且读取的字符串未转为int类型。 - 重复触发输入:main方法里先单独调用
name()、age(),之后又在output(name(), age())里再次调用这两个方法,导致用户要输入两次姓名和年龄。 - Scanner重复创建:已经定义了静态Scanner实例
s,age方法里又新建Scanner,既浪费资源还可能引发输入异常。 - 输出格式问题:输出字符串中缺少必要空格,比如
Hello " + name + "since会变成类似Hello Zhangsinc...的错误格式。
修复后的完整代码
import java.util.Scanner; public class JavaMethods { // 只初始化一次静态Scanner,全局复用 private static Scanner s = new Scanner(System.in); public static void main(String[] args) { // 调用输入方法,把返回值存到变量里 String userName = name(); int userAge = age(); // 用变量传递给output方法,避免重复输入 output(userName, userAge); } static String name() { System.out.println("Enter full name"); String names = s.nextLine(); return names; } public static int age() { System.out.println("Enter age"); // 读取输入并转为int类型 int userAge = Integer.parseInt(s.nextLine()); return userAge; } public static void output(String name, int age) { // 补全字符串里的空格,优化输出格式 if (age >= 50) { System.out.println("Hello " + name + ", since you are " + age + ", you are really old."); } else if (age <= 21) { System.out.println("Hello " + name + ", since you are " + age + ", you are really young."); } else { System.out.println("Hello " + name + ", since you are " + age + ", you are doing just fine."); } } }
关键修改说明
- 修复死循环:age方法里把递归调用改成返回转换后的int类型年龄值,解决无限递归问题。
- 避免重复输入:main方法中先把输入方法的返回值保存到变量,再将变量传给output,用户只需要输入一次姓名和年龄。
- 复用Scanner:只初始化一次静态Scanner,所有输入方法共用同一个实例,避免资源浪费和输入异常。
- 优化输出格式:在字符串中添加逗号和空格,让输出语句更通顺易读。
内容的提问来源于stack exchange,提问作者Ek.dau
相关产品推荐
相关产品推荐

