2014-12-09 3 views
1

두 문자열의 알파벳순 범위 내의 모든 단어를 제거하는 메서드를 만들려고합니다.for 루프를 사용하여 ArrayList에 하위 목록 추가

[와, 내 친구가] 난 정말 이유를 이해하지 않습니다

??? :의 I는 기본적으로 모든 것을 제거해야합니다 준 매개 변수, 그러나 이것은 내 출력

public static void main(String[] args) { 
     ArrayList<String> stringList = new ArrayList<String>(); 
     stringList.add("hello"); 
     stringList.add("and"); 
     stringList.add("welcome"); 
     stringList.add("my"); 
     stringList.add("little"); 
     stringList.add("friends"); 
     System.out.println(stringList); 
     removeInRange(stringList, "abc", "zen"); 
    } 

    public static void removeInRange(ArrayList<String> arrayList, String start, String end) { 
     char startChar = start.charAt(0); 
     char endChar = end.charAt(0); 
     for (int i = 0; i < arrayList.size(); i++) { 
      Character target = arrayList.get(i).charAt(0); 
      for (char c = startChar; c <= endChar; c++) { 
       if (target.equals(c)) { 
        arrayList.remove(i); 
       } 
      } 
     } 
     System.out.println(arrayList); 
    } 
+0

는 반복의 일환으로 인덱싱을 사용하지 마십시오. get (i)' – gtgaxiola

답변

0

목록을 거꾸로 가고 싶습니다. 당신이 그것을 스스로 알아 내고 싶은 경우에 대비해서 왜 지금 말하지 않겠습니까? 할 수 없다면 물어보십시오.

+3

이 게시물을 코멘트로 달아주세요 ... – KarelG

+0

@KarelG에 동의합니다 – gtgaxiola

+1

왜? 그것은 질문에 대답합니다. 그렇지 않습니까? – Dima

1

ArrayList에서 요소를 제거하면 그 다음 요소는 1 씩 감소합니다. 당신은 당신의 루프에서이 차지해야한다 : 예를 들어

: 목록에서 제거하고`ArrayList를 선택시`i`을 변경으로

for (int i = 0; i < arrayList.size(); i++) { 
     Character target = arrayList.get(i).charAt(0); 
     for (char c = startChar; c <= endChar; c++) { 
      if (target.equals(c)) { 
       arrayList.remove(i); 
       i--; // this would make sure you don't skip any element in the list 
      } 
     } 
    } 
+0

Eran이 맞지만 문자 검사를위한 for-loop를 사용하지 않고도 문자 감지를 향상시킬 수 있습니다. 'if (target> = startChar && target <= endChar)'를 사용하면 약간의 개선이 될 것입니다. – KarelG

관련 문제