我有3个不同的班级。我必须使用BufferedReader
但使用toString
方法来获取用户输入。以下是我User2
(其中一个类)中的代码。
如何在主要功能中调用用户在toString
输入的所有内容?如果我必须使用对象,怎么样?
//in User2 class
@Override
public String toString() {
try {
//getting input using BufferedReader
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) {
return "";
}
return "" ;
}
我只知道使用
将所有内容打印成字符串 System.out.println(u2.toString());
提前致谢。
答案 0 :(得分:0)
当您调用它的toString()
方法时,不应该定义对象,尤其是当您使用Scanner从System.in读取数据时。相反,当您读取数据时,您应该使用数据来实例化Object。我还没有看到你班级的布局,但我觉得你并不完全理解what Objects are.
以下类定义用户;用户有一个名字,地址和HP。一旦掌握了这些信息,就可以创建一个新的用户对象,因为在这种情况下,拥有一个不代表已知用户的Object是没有意义的。
toString()
方法已被覆盖,因此它生成一个代表Object描述内容的String - 您应该将此值调整为在将Object转换为String时Object的代表性。 Read more about the toString method and it's purpose.
static User userFromInput()
方法可以满足您的需求。由于它是static,您可以在类上调用它,这意味着您不必实例化Object。此方法接受来自用户的输入(名称,地址和hp),实例化一个新的User对象并返回它。
public class User {
private String name;
private String address;
private String hp;
public User (String name, String address, String hp) {
this.name = name;
this.address = address;
this.hp = hp;
}
@Override
public String toString() {
return name + " : " + address + " : " + hp;
}
public static User userFromInput() {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("Enter customer name: ");
String name = br.readLine();
System.out.print("Enter customer address: ");
String address = br.readLine();
System.out.print("Enter customer contact no: ");
String hp = br.readLine();
return new User(name, address, hp);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
因此,您应该要求用户输入数据,然后使用以下内容将对象打印到控制台:
User user1 = User.userFromInput();
System.out.println(user1.toString());