有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java新手正在努力从arraylist中删除对象

我需要删除一个基于其自身类实例中变量的元素

我有一个名为Account的类和一个名为AccountList的ArrayList。据我所知,有两种方法可以从数组中删除元素:通过索引和使用Object 0方法

不幸的是,这两个都不适合我;如果一个对象的变量值“accountNumber”(来自Account类)等于用户输入的accountNumber的参数值,我需要删除该对象。我的导师想要一个带有字符串参数Account Number的布尔方法

我的方法是使用Account类的getAccNumber()getter方法,如果它等于参数,则将其删除

public boolean removeAccount(String AccountNumber)

{   

    if (AccountNumber.equals(Account.getAccNumber()))
    {

        accounts.remove(AccountNumber);
        return true;
    }
    else
    {
        return false;
    }
}

然而,这是行不通的

顺便说一句,我不得不将getAccNumber()方法设为静态,以允许ArrayList类进行访问。这把账目的实例搞砸了;如果我创建它的新实例,新的AccountNumber值将覆盖上一个实例

有什么想法吗

编辑。。。他对它的确切说明是“removeAccount(String)应该删除帐号指定为参数的帐号,如果帐号存在的话。然后应该通过BlueJ‘方法结果’对话框返回相应的布尔值。”


共 (1) 个答案

  1. # 1 楼答案

    以下是如何在Java 8中无需任何迭代即可完成此任务:

    accounts.removeIf(account -> accountNumber.equals(account.getAccNumber()));
    

    这个表达式返回true如果删除了某个内容,则返回false

    如果你不能使用Java 8:我不确定你是什么,不允许使用什么。如果可以使用循环,但不能使用Iterator或增强的for循环(for Account acc : accounts),它通过暗示使用迭代器,那么可以使用索引编写循环:

    for (int i = 0; i < accounts.size(); i++) {
        if (accountNumber.equals(accounts.get(i).getAccNumber())) {
            accounts.remove(i);
            break;
        }
    }
    

    这将找到具有匹配索引的帐户索引,然后使用remove(index)方法将其删除。[请注意,如果需要删除多个元素,则必须修改此方法,因为remove(i)方法会移动元素i后面元素的所有索引,这意味着如果不小心,i++可以跳过一个。但我假设最多有一个帐户具有给定的帐号。]