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

如何在Main函数中调用User2类toString方法获取的用户输入?

如何通过重写的toString方法获取用户输入并在Main中使用?

嘿,我来帮你解决这个问题!首先得说,你现在的toString写法有点“不走寻常路”——因为toString的本职工作是返回对象的字符串描述,不是用来读取用户输入的。不过既然你要求必须用toString和BufferedReader来实现,那我们调整代码来达到你的需求。

首先先说说你当前代码的问题:你的toString方法虽然读取了输入并赋值给对象的成员变量,但最后返回了空字符串,而且没有提供外部访问这些变量的途径,所以Main里调用后拿不到输入的值。另外,直接在toString里做IO操作不符合Java的编码规范,但我们先按你的要求来调整。

第一步:修改User2类

我们需要给User2添加成员变量、getter方法,同时修正toString的逻辑,让它既完成输入赋值,又返回合理的字符串表示:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class User2 {
    // 定义私有成员变量,存储用户输入
    private String name;
    private String address;
    private String hp;

    @Override
    public String toString() {
        // 使用try-with-resources自动关闭流,避免资源泄漏
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            System.out.print("Enter customer name: ");
            this.name = br.readLine();
            System.out.print("Enter customer address: ");
            this.address = br.readLine();
            System.out.print("Enter customer contact no: ");
            this.hp = br.readLine();
        } catch (IOException e) {
            e.printStackTrace(); // 打印异常方便调试,不要直接返回空
            return "输入失败:" + e.getMessage();
        }
        // 返回对象的字符串描述,这才是toString的本职工作
        return String.format("用户信息{姓名='%s', 地址='%s', 联系方式='%s'}", this.name, this.address, this.hp);
    }

    // 提供getter方法,让外部可以访问私有成员变量
    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public String getHp() {
        return hp;
    }
}

第二步:在Main函数中调用并获取输入值

创建User2对象后,调用toString方法会触发用户输入逻辑,给对象的成员变量赋值。之后你就可以通过对象的getter方法拿到每个输入的内容:

public class Main {
    public static void main(String[] args) {
        // 创建User2对象
        User2 u2 = new User2();

        // 调用toString方法,此时会弹出输入提示,完成输入后给u2的变量赋值
        String userInfoStr = u2.toString();
        // 可选:打印toString返回的完整用户信息
        System.out.println("\n你输入的用户信息:" + userInfoStr);

        // 通过对象的getter方法单独获取每个输入值
        String customerName = u2.getName();
        String customerAddress = u2.getAddress();
        String customerContact = u2.getHp();

        // 后续可以用这些值做任何操作,比如单独打印
        System.out.println("\n单独提取的信息:");
        System.out.println("姓名:" + customerName);
        System.out.println("地址:" + customerAddress);
        System.out.println("联系方式:" + customerContact);
    }
}

额外提醒

虽然上面的代码满足了你的要求,但还是要强调:toString方法不应该用来处理用户输入,这违背了单一职责原则。正常开发中,我们会单独写一个类似readUserInput()的方法来处理输入逻辑,toString只负责返回对象的字符串表示。不过既然你有硬性要求,上面的方案完全可行。

内容的提问来源于stack exchange,提问作者Syamil Fuad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:19:59