setters/getters和getName()以及应用程序错误



我的customer.dat文件如下所示:

 4
 Jon 1000
 Jane 2000
 Jake 20000
 Drake 100000

第一个数字表示该文件中的客户总数,而第一个字符串是客户的名称,后者是他们的余额。

下面的代码是我编写的应用程序代码。我希望它从customer.dat中读取并创建一个数组。该应用程序的问题是,我创建了一个客户ID,它检查用户输入的名称(如果它存在于数组中),然后设置一个客户标识。然而,每当我运行该应用程序时,无论我键入什么名称,即使我键入Drake-并键入"1"来查看投资组合,它最终总是显示第一个名称Jon。

    Scanner infile2 = new Scanner(new File("customer.dat"));
    customer[]mycustomers; // declaring an array to stock
    int numofcustomers = infile2.nextInt();
    mycustomers = new customer [numofcustomers]; 
    for (int i = 0; i < numofcustomers; i++)
    {
        mycustomers[i] = new customer(infile2.next(),infile2.nextDouble(), numofcustomers);
        System.out.println(mycustomers[i].toString());
    }
    Scanner input = new Scanner (System.in);
    System.out.println("Please type in your name");
    String Name  = input.nextLine();
    int cusID = 0;
    for (int i = 0; i < numofcustomers; i++) 
    { 
       if ( Name == mycustomers[i].getName())
       {
           cusID = i;
       }
    }
    System.out.println("Please type in 1 for a customer to view their portfolio, 2 to trade stocks or 3 to exit the application");   
    int choice  = Integer.parseInt(input.nextLine());
    if (choice == 1)
    {
            System.out.println(mycustomers[cusID].toString());
    }

以下是我的customer.java中包含setter和getter的内容片段:

    public customer(String n, double b, int Size)
    {
        Name = n;
        balance = b;
        stock[] A = new stock[Size];
        Portfolio = A;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }

我不确定我是否能够正确描述这个问题,但如果不能,请告诉我是否需要更多信息。

首先,Java命名约定通常会指定CamelCase类名(即重命名为Customer而不是Customer)。

我相信你的问题就在这里:

Name == mycustomers[i].getName()

在Java中,字符串是对象,必须使用equals()方法进行比较,如下所示:

Name.equals(mycustomers[i].getName())

如果使用标准==,则比较是在对象的内存位置上进行的,因此除非Name和getName()实际上是完全相同的String对象(不太可能),否则这将是错误的。这意味着if语句永远不会计算为true,cusID在初始化时保持为0,因此您打印出列表中的第一个名称Jon。

除了更改上面的内容外,我建议您将cusID初始化为-1,这样您就可以区分列表中找不到的名称和列表中第一个元素的选择。另外,如果名单上有两个同名的人呢?(提示:在当前实现中永远不会选择第一个。)

相关内容

最新更新