Gerade jetzt Ihren Code überprüfen wollte Überprüfung wird ob eines der Arrays innerhalb array2
sind die gleichen. array2[i]
und array2[j]
beziehen sich beide auf Arrays, weil array2
ein Array von Arrays ist.
Stattdessen möchten Sie die Werte in jedem dieser Arrays betrachten. Da Sie bei einem wiederholten Wert an einer beliebigen Stelle im Grid fehlschlagen möchten, versuchen Sie effektiv, die Struktur in eine Sammlung zu reduzieren und nach Duplikaten zu suchen.
Eine HashSet
ist die beste Datenstruktur in diesem Fall zu verwenden. Durchqueren Sie das gesamte Raster, Zeile für Zeile, und fügen Sie Werte in Ihre neue Struktur ein. Wenn Sie ein Duplikat stoßen, kehren false
:
public static boolean isUnique(int[][] array2) {
Set<Integer> values = new HashSet<>();
for (int i = 0; i < array2.length; i++) {
for (int j = 0; j < array2[i].length; j++) {
if (!values.add(array2[i][j])) {
return false;
}
}
}
return true;
}
Einige Dinge zu beachten:
Das Set add
method wird falsch zurück, wenn Sie ein Duplikat der Sammlung hinzuzufügen versuchen, so dass gewickelt ist in eine if
Anweisung für eine einfache, Fail-Fast-Stop-Bedingung.
Die Größen von jedem des inneren Arrays von der Größe der äußeren Anordnung völlig unabhängig sind, so dass Sie immer noch wollen Schleife von 0
auf die Länge des Arrays (wenn Sie <
verwenden, nicht wahr brauche die length - 1
).
Warum denken Sie, Ihre Logik ist falsch? Was ist das Problem/der Fehler, den Sie sehen? – nbrooks
@nbrooks Wenn ich die Methode in meinem Programm starte, wird es Arrays wie {0,0,0} {0,0,0} {0,0,0} erlauben –
zu passieren. Also unter "Duplicate values" meinst du du don Möchte keiner der inneren Arrays (Zeilen) gleich sein? Also ist {{0, 0, 0}, {0, 0, 0}} 'schlecht, aber' {{0, 0, 0}, {0, 0, 1}} 'ist ok? – nbrooks