我在Java中的数组搜索不起作用

时间:2013-05-05 20:23:43

标签: java arrays

我创建了一个包含3个不同人员“检查帐户信息”的数组,如果用户的输入与客户的其中一个匹配,我需要能够在我的代码的其他部分使用客户的其余数据。帐号“在我的数组中。

例如,如果用户输入12345678,我的代码将需要搜索数组,将该输入与“Jon”帐户匹配,然后将Jon的信息用于代码中的其他内容。我基本上是在写ATM软件。

我的问题在于将帐号与用户的输入相匹配。帐号是“cac”数组各部分的最后一个元素。

有人能告诉我我做错了什么吗?

CheckingAccountCustomer[] cac = new CheckingAccountCustomer[3]; // array of checking account customers, names, pins, balances, account numbers
    cac[0] = new CheckingAccountCustomer("Joe", 1234, 5000, 11111111);
    cac[1] = new CheckingAccountCustomer("Bob", 1111, 9000, 24606069);
    cac[2] = new CheckingAccountCustomer("Jon", 2222, 40000, 12345678);



    // prompt user for account number
    System.out.print("Please insert Debit Card or enter account number (8 digits):\n");
    sc.nextLine();
    int accountNumber = sc.nextInt();

    for (int i = 0; i < cac; i++)
    {
        if (accountNumber == cac[i][3])

            // DO STUFF WITH OTHER DATA
    }

5 个答案:

答案 0 :(得分:1)

首先,您的for语句应为:

for (int i = 0; i < cac.length; i++)

第二:引用cac[i][3]也可能是错误的,具体取决于CheckingAccountCustomer类的定义。

答案 1 :(得分:1)

我认为应该i < cac.length而不是cac,因为cac是一个数组。

请以任何方式使用Map,其中键是所需数字,它会更快。

答案 2 :(得分:1)

您没有正确地遍历数组。你应该使用以下for循环:

for (int i = 0; i < cac.length; i++) {

}

另外,你还有另一个有趣的问题。 accountNumber == cac[i][3]无效,因为cac只是一维数组。如果我们删除额外的维度访问权限,则会留下accountNumber == cac[i]

但是我们有另一个有趣的问题。为什么int等于CheckingAccountCustomer?那将永远不会成真。

您想要使用的是对象帐号的某种访问者。

所以,总的来说,你的for循环应该是这样的:

for (int i = 0; i < cac.length; i++) {
    if(accountNumber == cac[i].getAccountNumber()) {
        // logic.
    }
}

答案 3 :(得分:0)

您需要遍历数组。 for循环中的条件语句检查int是否大于CheckingAccountCustomer[],而不是数组的长度。

有条件的if语句也会将intCheckingAccountCustomer进行比较,评估后,您需要从CheckingAccountCustomer获取帐号。

for (int i = 0; i < cac.length; i++)
{
    if (accountNumber == cac[i][3].getAccountNumber())

        // DO STUFF WITH OTHER DATA
}

答案 4 :(得分:0)

您应该为循环使用“foreach”语法:

for :CheckingAccountCustomer c : cac) {
    if (c.getAccountNumber() == accountNumber)

}

请注意,我认为您拥有accountNumber的访问方法。