在没有ArrayList的Java中返回数组中的搜索结果
我在不知道可以使用ArrayList的情况下,开始在数组中实现一个简单的hw任务搜索。我意识到它有一些bug,并认为在使用ArrayList之前,我仍然会尝试知道我的bug是什么。我基本上有一个类,可以在其中添加、删除或从数组中搜索
public class AcmeLoanManager
{
public void addLoan(Loan h)
{
int loanId = h.getLoanId();
loanArray[loanId - 1] = h;
}
public Loan[] getAllLoans()
{
return loanArray;
}
public Loan[] findLoans(Person p)
{
//Loan[] searchedLoanArray = new Loan[10]; // create new array to hold searched values
searchedLoanArray = this.getAllLoans(); // fill new array with all values
// Looks through only valid array values, and if Person p does not match using Person.equals()
// sets that value to null.
for (int i = 0; i < searchedLoanArray.length; i++) {
if (searchedLoanArray[i] != null) {
if (!(searchedLoanArray[i].getClient().equals(p))) {
searchedLoanArray[i] = null;
}
}
}
return searchedLoanArray;
}
public void removeLoan(int loanId)
{
loanArray[loanId - 1] = null;
}
private Loan[] loanArray = new Loan[10];
private Loan[] searchedLoanArray = new Loan[10]; // separate array to hold values returned from search
}
在测试这个时,我认为它是有效的,但我认为我在搜索后覆盖了我的成员变量。我最初以为我可以在这个方法中创建一个新的Loan[]并返回它,但这似乎不起作用。然后我想我可以有两个数组。一个不会改变,另一个只针对搜索的值。但我认为我不理解一些东西,比如浅薄的复制和深层的复制
# 1 楼答案
我要做的是循环遍历这些值,并将每个值重新分配给新变量。或者,您可以使用Javaworld中描述的“深度复制”技术:http://www.javaworld.com/javaworld/javatips/jw-javatip76.html
# 2 楼答案
getAllLoans的返回值覆盖了searchedLoanArray引用,这意味着loanArray和searchedLoanArray都指向同一个底层数组。尝试将searchedLoanArray设置为局部变量,然后使用数组。复印件。如果您试图不在家庭作业中使用标准函数,请手动创建与loanArray大小相同的新Loan数组,然后循环并复制这些值
# 3 楼答案
你可以这样重写:
}
但就目前而言,该准则仍存在一些问题:
List<Loan>
时,可以避免这个问题李>以下是一个有以下更改的版本:
我希望这有帮助
# 4 楼答案
您的searchloanarray和loanarray指向同一个数组。这样做
什么都不做,因为你从未使用过那笔新贷款[10]
这是解决你问题的关键
这就把搜索到的loanArray指向了loanArray