0

整数配列"arr"をソートした後、配列内の重複を特定しようとします。配列の一部に対してそれを行いますが、配列全体の重複を識別しません。助けてくれてありがとう。これが私のコードです:

import java.util.*;

public class Ex24 {
public static void main(String[] args) {
    int i, n = 100;
    Integer[] arr = Collections.nCopies(n, 0).toArray(new Integer[0]);
  //  int[] array = {0};
    for (int j = 0; j < n ; j++){
        arr[j] = (int) (Math.random() * 365 + 1);
    //    System.out.print(j + "   " + arr[j] + "\n");
    }
        Arrays.sort(arr);  //sort the arr
      //  String arrq = (Arrays.toString(arr));
        System.out.println("\n");

        Duplicate(arr, n);
        } 
        static void Duplicate(Integer[] arr, int n) {
           int j = 0;
           for (int i = 0; i < n-1 ; i++) {

           if (arr[i] != arr[i+1]) {
                System.out.println(" at i   (" + i + ")    print arr[i] " + arr[i]); 
           }
                    else {
                    j = j +1;
                 System.out.println("  j =  " + j + "  at i (" + i + ")  arr[i] is double at date  " + arr[i]); 
           }                   
           }
        }
      }
4

3 に答える 3

1

整数オブジェクトを比較しているので、代わりに:

if (arr[i] != arr[i+1])

これを行う:

if (!arr[i].equals(arr[i+1]))

!=or==演算子は、実際のオブジェクト値を比較する代わりに、プリミティブを比較したり、オブジェクト参照を比較したりするために使用されることを理解してください。

ところで、コードにはリファクタリングが必要です。本当に重複を見つけたい場合はjava.util.Set、配列を並べ替えて重複を見つける代わりに使用するなど、より良い方法がいくつかあります。

于 2013-04-17T06:02:03.277 に答える
0

Integer問題は、 を使用して参照を比較していることです==。(というか、!=。)

==and!=演算子は、オペランドが参照型の式である場合、常に参照を比較します。これらの演算子は、2 つのオペランドが等しいオブジェクトを参照しているかどうかではなく、まったく同じオブジェクトへの参照であるかどうかを比較します。

Java でのボクシングは、Integer-127 から 127 の範囲の値に対してオブジェクトのキャッシュを使用することが保証されているため、いくつかの値に対して動作することがわかります。それを超えると(またはポイント1Integer ) 、参照によって単純に比較した場合、同等とは見なされないさまざまなオブジェクトが表示されます。代わりに、次のメソッドを使用して値が等しいかどうかを比較します。equals

if (!arr[i].equals(arr[i+1]))

1正確な境界は実装によって異なります。実装によっては、より大きなキャッシュを持つ場合があります。

于 2013-04-17T06:04:09.320 に答える
0

==オブジェクトを間違っているものと比較します。

if (arr[i] != arr[i+1]) {

この特定の問題を Integer で修正するには、次の 2 つの方法があります。

1.

if (!arr[i].equals(arr[i+1])) {

2.

if (arr[i].intValue() != arr[i+1].intValue()) {
于 2013-04-17T06:17:06.663 に答える