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);
ヌルしばらくは再び実行されないことになったが、それは何らかの形で起こっているされた後。
あなたが '||'を使用しているため、while条件として使用される式の中に&&演算子の代わりに 'OR'条件を入力したため、そのうちの1つだけが真でなければなりません。 – Ramanlfc
だから、たとえaがnullでもbがnullでなくてもwhileループの中に入るはずです –