2016-02-09 114 views
0

在此方法中,我按字母順序比較String個元素。換句話說,如果ArrayList中的元素按字母順序大於最小值String(方法中的參數)且小於最大值String(也是參數),則應該從ArrayList中刪除此String元素。按字母順序比較ArrayList中的字符串元素

但是,運行該方法後沒有返回字符串,甚至沒有應該保留在方法調用後的字符串。另外,當IF條件不滿足時,它將打印出"Error"而不返回列表。

import java.util.ArrayList; 

public class Main { 

    public static ArrayList<String> removeInRange(ArrayList<String> list, String beginning, String ending) 
    { 

     for (int i = 0; i<list.size(); i++) 
     { 
      if (list.get(i).compareTo(beginning)> 0 && list.get(i).compareTo(ending)< 0) 
      { 
       list.remove(list.get(i)); 
      } 

      else { 

       System.out.println("Error"); 
      } 
     } return list; 
    } 

    public static void main(String[] args) { 

     ArrayList<String> list = new ArrayList<>(); 
     list.add("h"); 
     list.add("e"); 
     list.add("x"); 

     removeInRange(list, "a", "k"); 

    } 
} 
+1

向後迭代列表,或使用'Iterator.remove()'。 –

+1

撇開有點破碎的刪除邏輯,你的問題是什麼?沒有地方你的「...但名單仍然沒有返回。」可以在代碼中申請你的節目。 – Durandal

回答

0

在第一次迭代期間,將從列表中移除h。所以,e被移到第一個位置。所以e不再比較。改用迭代器。

Iterator<String> iterator1 = list.iterator(); 
while(iterator1.hasNext()){ 
    String i = iterator1.next();  
    if (i.compareTo(beginning)> 0 && i.compareTo(ending)< 0) 
    { 
     iterator1.remove(); 
    } 
    else { 
     System.out.println("Error"); 
    } 
} 
return list; 
0

我會在這裏指出一些事情。

首先,我建議在迭代它時不要編輯對象,只會造成混淆。

其次,基於這一點,如果您將保留的列表添加到新列表中,則會更容易,然後返回新列表。但是如果你想修改現有的列表,這也是可能的。

public static ArrayList<String> removeInRange(ArrayList<String> list, String beginning, String ending) { 
    ArrayList<String> matching = new ArrayList<String>(); 
    for (int i = 0; i<list.size(); i++) { 
    if (list.get(i).compareTo(beginning)> 0 && list.get(i).compareTo(ending)< 0) 
    { 
     matching.add(list.get(i)); 
    } 
    else { 
     System.out.println("Error"); 
    } 
    } 
    list.removeAll(matching); 

    return list; 
} 
+0

或者只是翻轉條件和'返回匹配',如果你不想編輯列表 –

+0

正確的,這就是我在我的第二點,但OP可能想要原始列表編輯出於某種原因,所以保持邏輯。 – GoGoCarl

0

如果您使用的是Java 8

注意,這將不打印「錯誤」,其個人而言,並沒有多大意義,因爲它是不是一個錯誤,你只是忽略值。

public static void main(String[] args) { 
    ArrayList<String> list = new ArrayList<>(); 
    list.add("h"); 
    list.add("e"); 
    list.add("x"); 

    List<String> filtered= removeInRange(list, "a", "k"); 
    System.out.println(filtered); 

} 

private static List<String> removeInRange(ArrayList<String> list, String low, String high) { 
    return list.stream().filter(s -> s.compareTo(low) <= 0 || s.compareTo(high) >= 0).collect(Collectors.toList()); 
} 
相關問題