[英]ArrayList search always returns last object
我正在嘗試創建一個程序來存儲聯系信息並具有搜索功能。 但是,無論我進行什么搜索,它總是返回添加到ArrayList的最后一個對象。 我認為這與for循環有關,但我不確定。 我對編寫代碼非常陌生,任何輸入都值得贊賞。
這是我的搜索方法:
public void searchContacts()
{
Scanner stdIn = new Scanner (System.in);
System.out.println("Search Menu;\n1. First Name\n2. Last Name\n3. Street Address\n4. City, State\n5. Zip Code\n");
System.out.println("Please Enter Field to Search: ");
search = stdIn.nextInt();
Scanner stdIn1 = new Scanner (System.in);
System.out.println("Please enter value to search for: ");
value = stdIn1.nextLine();
switch (search)
{
case 1:
for(int i=0; i<addressBook.size();i++)
{
if(value.equals(addressBook.get(i).getFirstName()));
{
indexFound = i;
}
}
break;
case 2:
for(int i=0; i<addressBook.size();i++)
{
if(value.equalsIgnoreCase(addressBook.get(i).getLastName()));
{
indexFound = i;
}
}
break;
case 3:
for(int i=0; i<addressBook.size();i++)
{
if(value.equalsIgnoreCase(addressBook.get(i).getStreetAddress()));
{
indexFound = i;
}
}
break;
case 4:
for(int i=0; i<addressBook.size();i++)
{
if(value.equalsIgnoreCase(addressBook.get(i).getCityState()));
{
indexFound = i;
}
}
break;
case 5:
for(int i=0; i<addressBook.size();i++)
{
if(value.equalsIgnoreCase(addressBook.get(i).getZipCode()));
{
indexFound = i;
}
}
break;
default:
indexFound = -1;
}
}
如果需要的話,這里是我的顯示方法:
public void display()
{
System.out.println();
if (indexFound > -1)
{
System.out.println("First Name: " + addressBook.get(indexFound).getFirstName());
System.out.println("Last Name: " + addressBook.get(indexFound).getLastName());
System.out.println("Street Address: " + addressBook.get(indexFound).getStreetAddress());
System.out.println("City, State: " + addressBook.get(indexFound).getCityState());
System.out.println("Zip Code: " + addressBook.get(indexFound).getZipCode());
}
else
System.out.println("No Entry Found");
}
接觸類
public class Contact
{
private String firstName;
private String lastName;
private String streetAddress;
private String cityState;
private String zipCode;
public Contact (String first, String last, String street, String cS, String zip)
{
firstName = first;
lastName = last;
streetAddress = street;
cityState = cS;
zipCode = zip;
}
public String getFirstName()
{
return firstName;
}
public String getLastName()
{
return lastName;
}
public String getStreetAddress()
{
return streetAddress;
}
public String getCityState()
{
return cityState;
}
public String getZipCode()
{
return zipCode;
}
}
找到第一個元素后,您應該休息一下。
if(value.equals(addressBook.get(i).getFirstName()));
{
indexFound = i;
break;
}
問題是您的每個if
語句后都直接跟一個分號:
if (value.equals(addressBook.get(i).getFirstName())); // HERE is the problem - the semicolon
...字面解釋為“如果找到,什么也不做”。 在評估了if
語句之后,它始終總是跳入以下代碼塊:
{
indexFound = i;
}
因此,如果您刪除了if
語句之后的所有分號,並在設置indexFound
之后立即從方法中return
,則應該沒問題。
該代碼看起來類似於此-不幸的是,我現在無法測試此代碼...
switch (search)
{
case 1:
for (int i=0; i<addressBook.size(); i++)
{
if(value.equals(addressBook.get(i).getFirstName()))
{
indexFound = i;
return;
}
}
break;
case 2:
// etc.
成功匹配后循環就不會中斷。 循環直到最后一個索引。
根據以下代碼段進行更改:
for(int i=0; i<addressBook.size();i++)
{
if(value.equalsIgnoreCase(addressBook.get(i).getZipCode()));
{
indexFound = i;
break;
}
}
break;
根據您的要求,應將其重寫如下:
indexFound=-1;
for(int i=0; i<addressBook.size() && indexFound==-1 ;i++){
switch (search)
{
case 1:
if(value.equals(addressBook.get(i).getFirstName()));
indexFound = i;
break;
case 2:
if(value.equalsIgnoreCase(addressBook.get(i).getLastName()));
indexFound = i;
break;
case 3:
if(value.equalsIgnoreCase(addressBook.get(i).getStreetAddress()));
indexFound = i;
break;
case 4:
if(value.equalsIgnoreCase(addressBook.get(i).getCityState()));
indexFound = i;
break;
case 5:
if(value.equalsIgnoreCase(addressBook.get(i).getZipCode()));
indexFound = i;
break;
default:
indexFound = -1;
}
}
在每種情況下的每種if
條件中均應有一個break
語句。 對於特定的代碼,應該像這樣...
case 1:
for(int i=0; i<addressBook.size();i++)
{
if(value.equals(addressBook.get(i).getFirstName()));
{
indexFound = i;
break;
}
}
break;
在每種情況下都應實施。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.