2016-06-13 18 views
0

私は学校の割り当てのために洗練されているが、私は夢中になっているnullポインタの例外があります次のコードがあります。プログラムは、しばらくにいっているnullであり、それが起こると想定されていない場合は、whileループでJava、nullポインタ例外

public static <AnyType extends Comparable<? super AnyType>> 
    void difference(List<AnyType> L1, List<AnyType> L2, List<AnyType> Difference){ 

     if(L1 == null){ 
      Difference = null; 
     } 
     else if(L2 == null || L1.isEmpty() || L2.isEmpty()){ 
      Difference = L1; 
     } 
     else{ 
      Iterator<AnyType> iterator1 =L1.listIterator(); 
      Iterator<AnyType> iterator2 =L2.listIterator(); 

      AnyType a = iterator1.next(); 
      AnyType b = iterator2.next(); 

      while(a!=null || b!=null){ 
       int comp = a.compareTo(b); 
       if(comp > 0) 
        b =(iterator2.hasNext()) ? iterator2.next(): null; 

       else if(comp < 0){ 
        Difference.add(a); 
        a = (iterator1.hasNext())? iterator1.next(): null; 

       } 
       else { 
        a = (iterator1.hasNext())? iterator1.next() : null; 
        b = (iterator2.hasNext())? iterator2.next() : null; 
       } 
      } 
      if(b==null){ 
       while(a!=null){ 
        Difference.add(a); 
        a = iterator1.next(); 
       } 
      } 
     } 
     System.out.println("Difference Set: " + Arrays.toString(Difference.toArray())); 
    } 

は、ここに私のコードです。誰が私になぜこれが起きているのか教えてもらえますか?私がテストに使用しています データは次のとおりです。

List<Integer> list3 = Arrays.asList(1,2); 
     List<Integer> list4 =Arrays.asList(5,17); 
     List<Integer> listR = new ArrayList<>(); 

     ListsSets.difference(list3, list4, listR); 

ヌルしばらくは再び実行されないことになったが、それは何らかの形で起こっているされた後。

+2

あなたが '||'を使用しているため、while条件として使用される式の中に&&演算子の代わりに 'OR'条件を入力したため、そのうちの1つだけが真でなければなりません。 – Ramanlfc

+0

だから、たとえaがnullでもbがnullでなくてもwhileループの中に入るはずです –

答えて

0

||を使用すると、条件の1つが真であれば条件が合格になるので、&&を使用してください。その結果、aがnullではなく、bの場合、コードはまだ実行されています。