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

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.");
        }
    }
}

关键修改说明

  1. 修复死循环:age方法里把递归调用改成返回转换后的int类型年龄值,解决无限递归问题。
  2. 避免重复输入:main方法中先把输入方法的返回值保存到变量,再将变量传给output,用户只需要输入一次姓名和年龄。
  3. 复用Scanner:只初始化一次静态Scanner,所有输入方法共用同一个实例,避免资源浪费和输入异常。
  4. 优化输出格式:在字符串中添加逗号和空格,让输出语句更通顺易读。

内容的提问来源于stack exchange,提问作者Ek.dau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:40:32