2016-02-09 80 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()); 
} 
相关问题