如何在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
相关产品推荐
相关产品推荐

