java array size



Vergleich zweier Integer-Arrays in Java (7)

Die Länge der Arrays muss gleich sein und die Zahlen müssen immer gleich sein (die erste Zahl in Arrays muss der Sasme sein usw.)

Basierend auf diesem Kommentar haben Sie bereits Ihren Algorithmus:

  1. Überprüfen Sie, ob beide Arrays die gleiche Länge haben:

    array1.length == array2.length

  2. Die Nummern müssen an der gleichen Stelle gleich sein:

    array1 [x] == array2 [x]

Wenn Sie dies wissen, können Sie Ihren Code so erstellen (das ist kein Java-Code, es ist ein Algorithmus):

function compareArrays(int[] array1, int[] array2) {

    if (array1 == null) return false
    if (array2 == null) return false

    if array1.length != array2.length then return false

    for i <- 0 to array1.length - 1
        if array1[i] != array2[i] return false

    return true
}

Hinweis: Ihre Funktion sollte einen boolean Wert zurückgeben, der nicht void , dann den Rückgabewert in einer anderen Variablen wiederherstellen und sie zum Drucken der Nachricht "true" oder "false" verwenden:

public static void main(String[] args) {
    int[] array1;
    int[] array2;
    //initialize the arrays...
    //fill the arrays with items...
    //call the compare function
    boolean arrayEquality = compareArrays(array1, array2);
    if (arrayEquality) {
        System.out.println("arrays are equals");
    } else {
        System.out.println("arrays are not equals");
    }
}

Ich versuche Code zu schreiben, um zwei Arrays zu vergleichen. Im ersten Array habe ich eigene Ziffern eingegeben, aber das zweite Array nimmt Zahlen aus der Eingabedatei. Die Größe dieses Arrays wird von der ersten Nummer in der Datei bestimmt, während das erste Array immer die Größe 10 hat. Die Länge muss für beide Arrays und für die Nummern identisch sein. Mein Code ist unten:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = false;
    for (int i = 0; i < array2.length; i++) {

        for (int a = 0; a < array1.length; a++) {

            if (array2[i] == array1[a]) {
                b = true;
                System.out.println("true");
            } else {
                b = false;
                System.out.println("False");
                break;
            }
        }
    }       
}

Der Vollständigkeit halber sollten Sie eine Methode haben, die alle Arrays überprüfen kann:

    public static <E> boolean compareArrays(E[] array1, E[] array2) {
      boolean b = true;
      for (int i = 0; i < array2.length; i++) {
        if (array2[i].equals(array1[i]) ) {// For String Compare
           System.out.println("true");
        } else {
           b = false;
           System.out.println("False");
        }
      } 
      return b;
    }

Keine der vorhandenen Antworten beinhaltet die Verwendung eines Komparators und kann daher nicht in binären Bäumen oder zum Sortieren verwendet werden. Also werde ich das hier lassen:

public static int compareIntArrays(int[] a, int[] b) {
    if (a == null) {
        return b == null ? 0 : -1;
    }
    if (b == null) {
        return 1;
    }
    int cmp = a.length - b.length;
    if (cmp != 0) {
        return cmp;
    }
    for (int i = 0; i < a.length; i++) {
        cmp = Integer.compare(a[i], b[i]);
        if (cmp != 0) {
            return cmp;
        }
    }
    return 0;
}

Obwohl es etwas Leichtes wie .equals , möchte ich auf ZWEI Fehler hinweisen, die Sie in Ihrem Code gemacht haben. Der erste: Wenn Sie durch die Arrays gehen, sagen Sie, dass b true oder false . Dann fängst du nochmal an zu prüfen, wegen der for-Schleife. Aber jedes Mal, wenn du b einen Wert gibst. Also, egal was passiert, der Wert, auf den b gesetzt wird, ist immer der Wert der LETZTEN for-Schleife. Als nächstes setze boolean b = true , if equal = true , mache nichts, if equal = false , b=false .

Zweitens überprüfen Sie jetzt jeden Wert in array1 mit jedem Wert in array2 . Wenn ich das richtig verstanden habe, müssen Sie nur die Werte an der gleichen Stelle im Array überprüfen, was bedeutet, dass Sie die zweite for-Schleife gelöscht haben und wie if (array2[i] == array1[i]) aussehen sollten: if (array2[i] == array1[i]) . Dann sollte Ihr Code auch funktionieren.

Ihr Code würde so funktionieren:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = true;
    for (int i = 0; i < array2.length; i++) {
        if (array2[i] == array1[i]) {
            System.out.println("true");
        } else {
            b = false;
            System.out.println("False");
        }
    } 
    return b;

}

Aber wie von anderen gesagt, wäre einfacher: Arrays.equals (ary1, ary2);


Von dem, was ich sehe, versuchst du einfach zu sehen, ob sie gleich sind, wenn das wahr ist, geh einfach mit so etwas:

boolean areEqual = Arrays.equals(arr1, arr2);

Dies ist die Standardmethode.

Ops, es scheint, dass die Arrays auch sortiert werden müssen, um als gleich angesehen werden, aus dem Java-Dokument:

"Zwei Arrays werden als gleich betrachtet, wenn beide Arrays die gleiche Anzahl an Elementen enthalten und alle entsprechenden Paare von Elementen in den beiden Arrays gleich sind. Mit anderen Worten, zwei Arrays sind gleich, wenn sie die gleichen Elemente in der gleichen Reihenfolge enthalten"

Entschuldigung, dass ich das verpasst habe


Wenn Sie wissen, dass die Arrays die gleiche Größe haben, ist es nachweisbar schneller zu sortieren und dann zu vergleichen

Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)

Wenn Sie die Reihenfolge der Daten in den Arrays nicht ändern möchten, führen System.arraycopy zuerst eine System.arraycopy .


public static void compareArrays(int[] array1, int[] array2) {
        boolean b = true;
        if (array1 != null && array2 != null){
          if (array1.length != array2.length)
              b = false;
          else
              for (int i = 0; i < array2.length; i++) {
                  if (array2[i] != array1[i]) {
                      b = false;    
                  }                 
            }
        }else{
          b = false;
        }
        System.out.println(b);
    }




compare