Java中的for循环中的JAVA..IF语句

时间:2018-12-03 11:33:27

标签: java arrays for-loop if-statement arraylist

基本上,每当用户单击主菜单中的选项2时,他们都可以将资金存入他们选择的帐户中。 (这是我的选项2的代码。)对于这个示例,可以说我们有3个帐户。 “ 1001”,“ 1002”和“ 1003”是其ID。因此,我有一个for循环,该循环遍历称为“企业”的帐户数组,并具有if语句以查看该帐户是否存在。

System.out.println("Enter account you wish to deposit into: ");
depositRef = input.nextInt();

for(int i = 0; i < businesses.members.size(); i++) {
    //System.out.println(businesses.getCurrent(i).getAccRefNo()); a check to make sure all accounts exist. which they do.
    if (depositRef == businesses.getReferenceNo(i)) {
        System.out.println("Enter the amount you wish to deposit into " + businesses.getCurrent(i).getName() + "'s account: ");
        balance = input.nextDouble();
        businesses.getCurrent(i).deposit(balance);
    } else if (depositRef != businesses.getReferenceNo(i)) {
        System.out.print("Sorry Account doesnt exist. Try again!");
        return;
    }
}

break;

我的问题是,如果我们输入“ 1003”,则for循环在达到“ 1003”之前不会一直循环,只会说对不起帐户不存在!我如何修改此代码,以便它循环直到匹配为止?它只会循环一次,如果不匹配'1001',则会引发错误。

如果您认为此问题缺少任何可能会帮助您说出并不适当地添加的问题。

3 个答案:

答案 0 :(得分:2)

您的return语句的条件错误。如果您找到了该帐户,您想返回(停止查找)。如果您找不到它,则不会。

for(int i = 0; i < businesses.members.size(); i++) {
    if (depositRef == businesses.getReferenceNo(i)) {
        System.out.println("Enter the amount you wish to deposit into " + businesses.getCurrent(i).getName() + "'s account: ");
        balance = input.nextDouble();
        businesses.getCurrent(i).deposit(balance);
        return;
    }
}
System.out.print("Sorry Account doesnt exist. Try again!");

但是,这种查找效率很低,将花费O(n)时间,这意味着您添加的每个帐户的查找速度都会线性降低。

如果您改为在地图中保存帐户,则可以在O(1)时间访问它们,即,无论您有多少个帐户,都可以在同一时间内访问它们。

答案 1 :(得分:1)

您需要删除return

else { // redundant 'if (depositRef != businesses.getReferenceNo(i))'
    System.out.print("Sorry Account doesnt exist. Try again!");
    // return;
}

答案 2 :(得分:1)

这里不应该有一个return。尝试

else if (depositRef != businesses.getReferenceNo(i))
{
    System.out.print("Sorry Account doesnt exist. Try again!");
}

为避免找到正确的循环后无用的循环,请在此处添加返回值:

  if (depositRef == businesses.getReferenceNo(i)) {
        System.out.println("Enter the amount you wish to deposit into " + businesses.getCurrent(i).getName() + "'s account: ");
        balance = input.nextDouble();
        businesses.getCurrent(i).deposit(balance);
        return;
    }

但是,是的,您这样做的效率非常低。您应该签出Map才能以更好的方式进行操作。