我有一個類型爲Store的列表,用戶可以在列表中添加項目,其中包含與它們相關聯的名稱和ID。在列表中搜索提供了錯誤的結果
public class StoreSearch {
public static void main(String[] args) throws IOException {
ArrayList <Store> stores = new ArrayList();
String input = "";
String name;
int id = 0;
int newId = 0;
int index = 0;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(!(input.equals("quit"))) {
System.out.println("Hello!\nEnter add or search");
input = in.readLine();
if(input.equalsIgnoreCase("add")) {
System.out.println("Enter a name ");
name = in.readLine();
System.out.println("Enter a id");
input = in.readLine();
id = Integer.parseInt(input);
Store s = new Store(name,id);
if(!stores.contains(s))
stores.add(s);//only add if combination of name and id are not in it
}
if(input.equals("search")) {
System.out.println("Enter a name");
name = in.readLine();
System.out.println("Enter a id guideline");
input = in.readLine();
index = input.indexOf("-");
if(index == 0) {
String substring = input.substring(input.lastIndexOf("-") + 1);
newId = Integer.parseInt(substring);
Store s = new Store(name,id);
for(int counter = 0; counter < stores.size(); counter++) {
if(stores.contains(s)) {
System.out.println(stores.toString());
}
}
}
if(index == 4) {
String[] parts = input.split("\\-"); // String array, each element is text between dots
newId = Integer.parseInt(parts[0]);
//the hyphen after the 4 digit number
}
else {
//only id
}
}
}
}
}
和存儲類:
public class Store {
private String name;
private int id;
public Store(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public String toString() {
return " Name " + name + " id " + id;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Store){
Store element = (Store) obj;
if(this.name.equals(element.name) && element.id == (this.id)){
return true;
}
}
return false;
}
@Override
public int hashCode() {
int hash = 7;
hash = 61 * hash + Objects.hashCode(this.name);
hash = 61 * hash + this.id;
return hash;
}
}
我有添加到列表中,在那裏我如果的事的組合進入我只添加到列表中沒有任何問題,它的名稱和ID不存在已經存在。然而,我試圖搜索列表,這導致了我的問題。
舉例來說,如果我已經添加了這些元素的列表:
Snack 3366
Apple 3367
Apple 3368
,我想搜索列表如下:
名稱爲「蘋果」 標識準則是本"-3368"
意義,應該打印出任何具有相同名稱並具有3368以前的對象的對象。但是,我的輸出從來不會這樣做。我嘗試使用stores.get(index);
打印出來,但仍然給我錯誤的輸出。
對於第二條if語句,它檢查它們是否是4位數字後面的連字符,在這種情況下,「3370-」意味着所有輸入名稱的對象,並且應該返回id 3370及以上。考慮到我無法弄清楚第一個陳述,我無法嘗試第二個陳述。任何幫助,將不勝感激。
'如果(OBJ的instanceof書){'?你什麼時候到要比較一個'Book'反對'Store'?另外,你可以使用'Set'而不是'List'來保證不安全 – MadProgrammer
對不起,我只是修復了它,我也被迫使用了arrayL爲此。 – user3739406
爲什麼if(stores.contains(s)){'在for循環中?你不使用'counter'。 –