我正在創建一個名爲「users」的Arraylist<object>
的簡單檢查。用戶對象具有用戶名和密碼字段。我正在創建一個方法來刪除一個用戶,它不會返回所需的結果。Java ArrayList包含不返回預期結果的方法
public void remove(){
if(users.contains(in.nextLine())) //if ArrayList contains username you want to remove
users.remove(this);
else
System.out.println("There is not a user with that name");
}
問題是,當我輸入相同的準確的用戶名,因爲這是已經在ArrayList中,它仍返回else語句的用戶的用戶名。我有一個預感,那是因爲我的equals/hashcode overrides
繼承自它的類。它們只是Eclipse生成的通用類。
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserAccount other = (UserAccount) obj;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
**** ****編輯 的Equals超控處於超類 「UserAccount」。我創建了一個繼承UserAccount的「FacebookUser」類,然後創建了繼承FacebookUser的「Facebook」類。 「Facebook」類是我的方法所在。每一個構造函數是
UserAccount(String username, String password){
this.username = username;
this.password = password;
}
Facebook(String username, String password){ //FacebookUser the same
super(username, password);
}
,他們用這種方法
public void add(){
System.out.println("Add username..");
if(users.contains(username = in.nextLine()))
System.out.println("Already a user of that name");
else {
System.out.println("Add password..");
users.add(new Facebook(username, in.nextLine()));
}
}
有沒有更好的辦法,我可以重寫等於使此代碼工作添加到列表中?感謝您的回覆,我嘗試了if(users.toString().contains(in.nextLine()))
,並得到了期望的結果。我的toString()重寫返回this.username;
此外,我做出了錯誤的來電來訪users.remove(this);
您尚未發佈足夠的代碼。我假設你有一個UserAccounts的列表,但你正在檢查它是否包含指定的字符串。因此你的equals總是返回false – Gaskoin
你檢查'users'是否包含'String',但是刪除'this'?什麼是'用戶'?什麼是'這個'? –
您的文章缺少一些可以阻止我們幫助您的事情:ArrayList的聲明,您將其放入列表的類以及equals方法,以及您是否正在調用其超類的equals。目前還不清楚你發佈的等於你的代碼的位置是否適合你的代碼 – AfterWorkGuinness