2016-10-21 2 views
0

그래서 여기에 문제가 있습니다. 간격을위한 나의 concatinate 함수는 null로 전달 된 첫 번째 값을 돌리는 것처럼 보입니다. 그리고 나는 신의 사랑에 대해 왜 그런지 설명하지 않습니다.arraylist의 첫 번째 객체는 null이되지 않습니다. 이유는 알 수 없습니다.

public static ArrayList<Intervals> ConcatinateIntervals(ArrayList<Intervals> intervals) { 
    ArrayList<Intervals> concatinatedIntervals = new ArrayList<>(); 

    for (int i=0; i<intervals.size(); i++){ 
     for(int j=0; j<intervals.size(); j++){ 
      if(i==j){ 
       continue; 
      } 
      if(intervals.get(i).getMax() < intervals.get(j).getMin() || intervals.get(i).getMin()>intervals.get(j).getMax()){ 
      Intervals interval = intervals.get(i).Clone(); 
      concatinatedIntervals.add(interval); 
      continue; 
      } 
      // 1 
      if(intervals.get(i).getMin() < intervals.get(j).getMin() && intervals.get(i).getMax()<intervals.get(j).getMax()){ 
       Intervals interval = new Intervals(intervals.get(i).getMin(),intervals.get(j).getMax()); 
       concatinatedIntervals.add(interval); 
       break; 
      }//2 
      if(intervals.get(i).getMin() < intervals.get(j).getMin() && intervals.get(i).getMax()>intervals.get(j).getMax()){ 
       Intervals interval = intervals.get(i).Clone(); 
       concatinatedIntervals.add(interval); 
       break; 
      }//3 
      if(intervals.get(i).getMin() < intervals.get(j).getMax() && intervals.get(i).getMax()>intervals.get(j).getMax()){ 
       Intervals interval = new Intervals(intervals.get(j).getMin(),intervals.get(i).getMax()); 
       concatinatedIntervals.add(interval); 
       break; 
      }//4 
      if(intervals.get(i).getMin() > intervals.get(j).getMin() && intervals.get(i).getMax()<intervals.get(j).getMax()){ 
       Intervals interval = new Intervals(intervals.get(j).getMin(),intervals.get(j).getMax()); 
       concatinatedIntervals.add(interval); 
       break; 
      } 
     } 
    } 

    //removes all duplicates 
    Object[] st = concatinatedIntervals.toArray(); 
    for (Object s : st) { 
     if (concatinatedIntervals.indexOf(s) != concatinatedIntervals.lastIndexOf(s)) { 
      concatinatedIntervals.remove(concatinatedIntervals.lastIndexOf(s)); 
     } 
    } 

    return concatinatedIntervals; 
} 

10, 100 200,300 및 400,500의 간격으로 반환해야합니다. 하지만 나는 null이되는 것 같습니다. 내가 어디로 잘못 가고 있는지 알아 내야 겠어. 도와주세요.

아이디어는 간격의 입력에 대해 10-500 og 10-100, 200-300, 400-500의 간격 목록을 반환하고 중복되는 항목이 있다면 그 간격을 제거하고 연결해야한다고 생각합니다 그래서 그들은 하나 더 커지게됩니다.

답변

2

는 당신이 반환되는 ArrayList가 null이 아니라 concatinatedIntervals에 대한 참조는 오직 null 일 수 없습니다 따라서 생성자 호출과 동일하게 설정되어 있기 때문에 는, null 요소 (Interval들)을 포함하고 의미 있다고 가정합니다. clone() 대신에 Clone()을 쓰면 사용자가 직접 복제 방법을 구현했습니다. 목록에 Interval이 추가 된 유일한 위치는 이전 행의 생성자 호출 결과에 할당 된 참조를 추가하거나 null이 될 수없는 참조를 추가하거나 Clone()에 대한 호출 결과를 추가합니다. 따라서 Clone() 방법은 유일한 명백한 용의자입니다.

디버거를 사용하여 코드 실행을 단계별로 실행하고 모든 Interval의 값을 확인 했습니까?

+0

고마워요! 문제는 무효화 된 clone 메소드를 indid하고 null 객체를 ArrayList에 반환하는 것입니다. –

관련 문제