2016-01-03 80 views
1

我有一個ArrayList類填充了Result對象。每個結果都有一個名爲Category的屬性。循環通過ArrayList並僅打印出具有特定屬性的對象

我正在嘗試使用for循環打印出每個結果與來自用戶的輸入類別的方法。

目前for循環的工作,但if語句分離是否打印出結果不起作用,這就是我尋求幫助。

單獨的if語句是我認爲自從我嘗試了所有其他代碼以來此刻不工作的時候。

String categoryToPrint; 
    System.out.println("Which category would you like to print out results for?"); 
    categoryToPrint = scanner.nextLine(); 
    categoryToPrint = normalisera(grenAttVisa); //method making all letters small and first letter capital. 
    System.out.println("Resultlist for" + categoryToPrint); 
    for (int i = 0; i < resultlist.size(); i++) { 
     Athlete matched = null; 
     Result res = resultlist.get(i); 


     if (res.categoryName().equals(categoryToPrint)) { 


     for (int x = 0; x < resultlist.size(); x++) { 
      Athlete del = athletes.get(x); 
      if (res.athleteStartNumber() == del.startNumber()) { 
       matched = del; 
       break; 
      } 
     } 
     System.out.println(matched.surName() + " " + matched.lastName() + " has the result: " + res.categoryValue()); 
    } 
    } 
+0

請不要告訴我,'del.startNumber()'&'res.athleteStartNumber() '是字符串... –

+0

@Sparta他們不是,他們是int。 –

+0

哦,我記得這個問題。你沒有以正確的方式循環播放第二個數組列表。 –

回答

1

變化

for (int x = 0; x < resultlist.size(); x++) 

for (int x = 0; x < athletes.size(); x++) 

讓我們考慮這種情況了一會兒:

resultlist = [result1, result2, result3] // size() == 3 

athletes = [athlete1, athlete2] // size() == 2 

依託實際代碼:

for (int i = 0; i < resultlist.size(); i++) { 
    for (int x = 0; x < resultlist.size(); x++) { 
     Athlete del = athletes.get(x); 
     ... 

這是怎麼一回事了內環外循環的第一次迭代中:

resultlist.size() == 3 
i == 0, x == 0 ====> Athlete del = athletes.get(0); // x < 3, good 
i == 0, x == 1 ====> Athlete del = athletes.get(1); // x < 3, good 
i == 0, x == 2 ====> Athlete del = athletes.get(2); // x < 3, good but the athletes arraylist has only 2 elements, Exception raised 
+0

試過了,沒有工作:(可以有一個以上的錯誤作出了嗎?我得到的錯誤信息:異常在線程「主」java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:1 –

+0

噢,我剛剛注意到它,它是一個** StringIndexOutOfBoundsException **。因此,在行爲中,有些東西沒有顯示給我們,請嘗試調試您的代碼,找出哪條線是有問題的。 –

+0

private String normalize(String多個){。 \t \t返回s.trim()子串(0,1).toUpperCase()+ s.substring(1).toLowerCase(); \t} 這是一種方法我有我使用,使字符小寫和首字母大寫,我在許多方法的輸入文本中使用這種方法使它們具有可比性NT迄今爲止有一個問題,但現在它成爲一個錯誤。 –

相關問題