【问题标题】:Calling toString method in Main function在 Main 函数中调用 toString 方法
【发布时间】:2018-01-05 11:02:46
【问题描述】:

我有 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());

提前致谢。

【问题讨论】:

  • toString() 方法中从标准输入读取是一个非常糟糕的主意。这甚至不是一个有用的toString() 方法:它总是返回""。将此逻辑放在不同的方法中。
  • 所以有什么解决办法吗? @AndyTurner
  • "把这个逻辑放在不同的方法中"。
  • toString 理想情况下应该生成一个代表对象的字符串。确实不应该从系统中读取。
  • “我必须通过使用 BufferedReader 而使用 toString 方法来获取用户输入” 为什么您必须这样做?这是作业吗?如果是这样,我认为您可能误解了说明。

标签: java object tostring


【解决方案1】:

当你调用它的toString() 方法时,你不应该定义一个对象,尤其是当你使用 Scanner 从 System.in 读取数据时。相反,当您读取数据时,您应该使用数据来实例化对象。没看过你的课排版,但是感觉你不是很懂what Objects are.

以下类定义了一个用户;用户有姓名、地​​址和 hp。获得此信息后,您将创建一个新的用户对象,因为在这种情况下,拥有一个不代表已知用户的对象是没有意义的。

toString() 方法已被覆盖,因此它会生成一个代表对象描述的字符串 - 您应该将其调整为当对象转换为字符串时您希望对象如何代表。 Read more about the toString method and it's purpose.

static User userFromInput() 方法可以满足您的需求。因为它是static,你可以在类上调用它,这意味着你不必实例化一个对象。此方法从用户那里获取输入(姓名、地址和 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;
    }
}

因此,您应该调用用户输入数据,然后使用以下 to 行将对象打印到控制台:

User user1 = User.userFromInput();
System.out.println(user1.toString());

【讨论】:

  • 谢谢@zachary
  • @SyamilFuad 只要确保满足您的规格。还要确保关闭 BufferedReader,我忘了把它放在那里。 try-with-resource 将为您处理此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2014-03-26
  • 1970-01-01
  • 2023-03-28
  • 2019-04-25
  • 2012-09-28
相关资源
最近更新 更多