【问题标题】:print toString() from another class从另一个类打印 toString()
【发布时间】:2012-09-15 05:21:26
【问题描述】:

我之前在同一个项目上问过一个问题,但我仍然遇到无法解决的问题。 该项目有一个 Person 类、Validator 类、Customer 类和 Employee 类。 Person 类存储有关人员(姓名、电子邮件)的数据 Customer 类扩展了 person 类并将客户编号添加到 toString 方法。 Employee 类还扩展了 Person 类,并通过覆盖 toString 方法将社会安全号码扩展到它。

在页面底部,我试图从我的客户类或我的员工类中打印 toString 方法。我想确保根据用户选择的内容打印正确的类(如果他们正在输入客户信息或员工信息)

该分配明确指出“要将对象的数据打印到控制台,此应用程序应使用名为 print 的静态方法,该方法接受 Person 对象。”

我想我已经开始了,但是我在我的编码下得到了各种红线。从

开始
    public void toString()

向下排列。

我开始认为通过在线查找我陷入了更深的麻烦,所以如果有人可以帮助我解决它,我会非常感激。我的书没有详细说明如何执行此操作,并且它显示的所有示例似乎都是创建输入然后打印它,但我试图从用户那里获取输入,所以我感到困惑。

    import java.util.Scanner;
    public class PersonApp 
    {


public static void main(String[] args) 
{
    //welcome user to person tester
    System.out.println("Welcome to the Person Tester Application");
    System.out.println();

    Scanner in = new Scanner(System.in);


    //set choice to y
    String choice = "y";
    while (choice.equalsIgnoreCase("y"))
    {

        //prompt user to enter customer or employee
        System.out.println("Create customer or employee (c/e): ");
        String input = in.nextLine();

        if (input.equalsIgnoreCase("c"))
        {
            String firstName = Validator.getString(in, "Enter first name: ");
            String lastName = Validator.getString(in, "Enter last name: ");
            String email = Validator.getEmail(in, "Enter email address: ");
            String custNumber = Validator.getString(in, "Customer number: ");
            Customer customer = new Customer(firstName, lastName, email, custNumber);


        }

        else if(input.equalsIgnoreCase("e"))
        {
            String firstName = Validator.getString(in, "Enter first name: ");
            String lastName = Validator.getString(in, "Enter last name: ");
            String email = Validator.getEmail(in, "Enter email address: ");
            int empSoc = Validator.getInt(in, "Social security number: ");
            Employee employee = new Employee(firstName, lastName, email, empSoc);
        }

    public void toString()
    {
        Person p;
        p = c;
        System.out.println(c.toString());

        p = e;
        System.out.println(e.toString());
    }

    System.out.println("Continue? y/n: ");
    choice = in.nextLine();
    System.out.println();


}
}
    }

【问题讨论】:

  • toString 返回一个字符串,而不是 void。 “红色文本”上的工具提示应该让您知道大部分时间出了什么问题。
  • 我同意,当你明白你不理解它时,你会通过从互联网上复制代码来搞砸事情。在这种情况下,更大的问题是您将方法 toString 的代码粘贴到另一个 (main) 的中间。那个代码也是没用的。你应该回去一次一步。
  • @madth3 我实际上是自己编写了那部分代码,然后当它不起作用时,我开始在互联网上搜索帮助。我不知道那更好,但至少我可以说我自己搞砸了 LOL

标签: java


【解决方案1】:

您不能在另一个方法中定义方法。你有括号的方式,toString 是在main 中定义的,这是非法的。

此外,您不能让toString 返回void,因为它会覆盖Object 中的toString 方法。重命名您的方法或让它返回String

【讨论】:

  • 那么我是否将方法移到“继续 y/n”下方?陈述?它还会打印方法吗?
  • 您需要将它移到 main 方法之外,并且您需要像调用任何其他方法一样调用它。
  • 我遇到了另一个问题。我在 toString 方法中有一行声明了 Person p;这看起来不错,但我想要客户 c;和雇员 e;当我输入这两个时,我得到红线,它告诉我创建一个局部变量。我试图做的是告诉程序如果用户输入 C 来输入客户信息,我希望它打印客户 toString。与 e 相同的 Employee。我这样做的方式是否正确?
  • 您必须将CustomerEmployee 传递给您的toString 方法,或者分别为每个方法创建toString 方法。如何做到这一点是你的决定。
【解决方案2】:

您的 toString 方法需要从您的 main 方法中移出。它还需要返回一个字符串。您可能必须使用其他名称调用该方法。此外,如果 Employee 和 Validator 位于单独的包结构中,则必须导入它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2018-01-28
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多