2016-10-21 8 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の3つの間隔を戻す必要があります。しかし、私はnullを得ているようです。私はどこに間違っているのか理解していない。助けてください。

考えられるのは、間隔を入力すると、10〜500 og 10〜100,200〜300,400〜500の間隔のリストが返され、重複があればそれを取り除き、彼らは一つに大きくなります。

答えて

2

私はあなたがconcatinatedIntervalsへの参照がしかコンストラクタ呼び出しに等しく設定されているので、nullにすることはできませんから、返さArrayListがnullではありませんが、がnull要素Interval複数可)を含んで意味することを前提としています。あなたはclone()の代わりにClone()と書いているので、明らかに独自のクローニング方法を実装しました。 Intervalがリストに追加される唯一の場所は、前の行のコンストラクター呼び出しの結果が割り当てられた参照を追加するか、またはヌルにすることはできません。Clone()への呼び出し結果を追加します。したがって、Clone()メソッドが唯一の明らかな疑わしい疑いです。

デバッガでコードの実行をステップ実行し、すべてのIntervalの値をチェックしましたか?

+0

ありがとうございました!問題は、クローンメソッドが無効で、そのようなnullオブジェクトをArrayListに返すということでした。 –

関連する問題