我創建了一個對象Student,使用Comparable與getter/setters以及一個覆蓋compareTo的方法。在單獨的文件中,對象的數組列表由文本文件填充。現在我需要將arraylist中的值與另一個Student對象進行比較。使用Comparable的compareTo來比較一個對象與arraylist中的元素
文件被用來創建一個ArrayList如下:
try {
private static ArrayList<Student> array = new ArrayList<Student>();
File file = new File("students.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String inline = scanner.nextLine();
String[] split = inline.split(":");
Student myStudent = new Student();
myStudent.setUsername(split[0]);
myStudent.setPassword(split[1]);
array.add(myStudent);
}
scanner.close();
}
catch (FileNotFoundException e)
{
System.out.println("ERROR.");
}
文本文件看起來像這樣:
約翰:密碼1
簡:密碼2
傑克:password3
(每行一個,中間沒有空行。)
而在一個單獨的方法所創建的學生對象相比,在數組列表中的元素:
Student aStudent = new Student();
aStudent.setUsername("student");
aStudent.setPassword("password");
boolean found = false;
for (int i = 0; i < array.size(); i++)
{
if (array.get(i).compareTo(aStudent) == 0)
{
System.out.println(aStudent.equals(array.get(i)));
found = true;
break;
}
else
{
System.out.println("No such records found!");
found = false;
break;
}
System.out.println(found);
}
的問題是,該物體aStudent不被用在數組列表中的對象進行比較。它不會爲compareTo調用打印任何東西(一個-1,0或1),但它總是顯示找到的是真的,即使它在文件中沒有與aStudent匹配的情況下應該是false(那裏與用戶名「student」或密碼「password」不匹配)。
所有在一起我的代碼符合和工作 - 它只是工作不正確。
對不起,如果這聽起來很混亂。簡而言之,我的問題是,如何使用Comparable接口和compareTo將arraylist的對象與另一個對象進行比較?如果你能告訴我我做錯了什麼,那麼加號就是了。
預先感謝您。
編輯
這裏是compareTo方法的重載:
public int compareTo(Student obj){
int result = 1;
if ((this.Username.compareToIgnoreCase(object.Username) < 0) || (this.Password.compareTo(object.Password) < 0))
{
result = -1;
}
else if ((this.Username.compareToIgnoreCase(object.Username) == 0) && (this.Password.compareTo(object.Password) == 0))
{
result = 0;
}
return result;
}
你在實現Comparable接口並重寫compareTo方法嗎?這裏是有用的鏈接:http://stackoverflow.com/questions/18757805/implementing-custom-compareto – 2014-10-08 03:22:31
@sushanttambare感謝您的回覆和鏈接。是的,我重寫compareTo方法的方式類似於鏈接中顯示的方式。當我創建和比較兩個Student對象(例如,aStudent.compareTo(bStudent))時,它按預期工作,所以我猜想問題在於arraylist,但我無法弄清楚導致問題的原因。 – 2014-10-08 03:26:34
你似乎過早地打破了循環。也就是說,'else'語句打破了循環,這意味着你只會比較數組中的第一個元素,而沒有更多... – MadProgrammer 2014-10-08 03:28:44