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

时间:2016-04-29 01:43:50

标签: java constructor

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

 4
 Jon 1000
 Jane 2000
 Jake 20000
 Drake 100000

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

以下代码是我编写的应用程序代码。我希望它从customer.dat读取并创建一个数组。该应用程序的问题是我创建了一个客户ID,它检查用户输入的名称(如果它存在于数组中(然后设置客户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;
    }

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

1 个答案:

答案 0 :(得分:0)

首先,Java命名约定通常会指示您使用CamelCase类名称(即重命名为Customer而不是客户)。

我相信你的问题在这里:

Name == mycustomers[i].getName()

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

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

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

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

相关问题