2017-07-17 11 views
1

私は一連の整数の形でユーザ入力をキャプチャしています。これは2回起こり、2つのArrayListsに格納されます。ここに私のコードはそのためです。私はlist1list2の重複から作られたlist3を作成しようとするとネストされたforループ整数比較 - 予期しないインデックス

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
    System.out.println("Enter the first set of integers on one line, end with -1."); 
    Scanner scanner1 = new Scanner(System.in); 
    int item = 0; 
    while (
    item != -1 
) { 
    item = scanner1.nextInt(); 
    list1.add(item); 
    } 
    //remove the last item on arraylist because its the -1 
    list1.remove(list1.size()-1); 
    //done making list1 
    //start list2 
    item = 0; 
    ArrayList<Integer> list2 = new ArrayList<Integer>(); 
    System.out.println("Enter the first set of integers on one line, end with -1."); 
    Scanner scanner2 = new Scanner(System.in); 
    while (
    item != -1 
) { 
    item = scanner2.nextInt(); 
    list2.add(item); 
    } 
    //remove the last item on arraylist because its the -1 
    list2.remove(list2.size()-1); 
    //end list2 

私の問題が発生します。私はをそれぞれ(最初のループレベルのために)Integerを最初のリストから取って、2番目のリストのIntegersのそれぞれ(2番目のforループネスト)と比較します。すべてこの後

[10, 200, 6, 99, 3, 5, 90, 44] 
[200, 56, 34, 3, 5, 87, 44, 5] 

、なぜ: は、彼らは、このような、

ArrayList<Integer> list3 = new ArrayList<Integer>(); 
    for(int i=0;i<list1.size();i++){//list1 
    for(int j=0;j<list2.size();j++){//list2 
     if(list1.get(i) == list2.get(j)){//check if same 
      int value = list1.get(i); 
      list3.add(value); 
     } 
    }//for list 2 
    }//for list 1 

は、私はいくつかの入力を与え、プログラムを実行し、リスト変数を印刷言うように、彼らは3番目のリストに追加され、一致している必要がありますlist3のprintline文は私に与えます:[3, 5, 5, 44]

なぜ200は無視されますか?インデックスについて何か分かりませんか?ループについて?他に何か?

答えて

3

Javaでは、Integerはプリミティブではなくオブジェクトです。 だから、代わりに:

if(list1.get(i) == list2.get(j)) 

使用:たとえば

if(list1.get(i).equals(list2.get(j))) 

:そこで

Integer i = 42; 
Integer j = 42; 
boolean b = i == j; 

btrueになります。しかし、これは、Javaがこれらの値をキャッシュするため、-128と127の間の整​​数にのみ当てはまります。

関連する問題