[英]Fill the ArrayList by accessing the matrix using a ‘nested’ FOR loop
[英]Fill ArrayList using for loop
我通過以下方式創建了一個名為 City 的 class 的 arrayList ,其中只有一個城市名稱的參數:
static ArrayList<City> citiesList = new ArrayList<City>() ;
我想在另一個 class 中通過我作為名為 name 的參數傳遞的文本字段填充此 arrayList。我所做的是(注意系統輸出打印是為了方便我檢查輸出):
public void createCity(String name) {
if(ApplicationFx.citiesList.isEmpty()) {
ApplicationFx.citiesList.add(new City(name));
}
for(int i=0;i<ApplicationFx.citiesList.size();i++) {
if(!ApplicationFx.citiesList.get(i).getCityName().equals(name)) {
System.out.println(i + " " + ApplicationFx.citiesList.get(i).getCityName() + " " + name);
ApplicationFx.citiesList.add(new City(name));
}
}
}
如果按下添加城市按鈕,事件處理程序會調用 createCity 方法,我的問題是我想檢查某個名稱是否已經存在,但是當我運行代碼時,我會在控制台中打印以下內容:
0 CITY1 CITY2
0 CITY1 CITY3
0 CITY1 CITY4
0 CITY1 CITY5
0 CITY1 CITY6
請注意,CITY1 是我沒有系統輸出的第一個輸入。任何解決方案?提前謝謝!
如果City
class 的唯一屬性是名稱,那么定義一個比較名稱的equals
方法是有意義的:
import java.util.Objects ;
public class City {
private final String name ;
public City(String name) {
this.name = name ;
}
public String getCityName() {
return name ;
}
@Override
public boolean equals(Object o) {
if (o == this) return true ;
if (! (o instanceof City)) return false ;
return Objects.equals(((City) o).getCityName(), name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
那么你所需要的就是
public void createCity(String name) {
City newCity = new City(name);
if(! ApplicationFx.citiesList.contains(newCity)) {
ApplicationFx.citiesList.add(newCity);
}
}
如果由於某種原因equals()
方法不適合您的 class,您可以這樣做
public void createCity(String name) {
for (City city : ApplicationFx.citiesList) {
if (city.getCityName().equals(name)) return ;
}
ApplicationFx.citiesList.add(new City(name));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.