Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zweidimensionales array kopieren und in eindimensionales überführen
Zuerst haben wir es mit verschiedenen Datentypen zu tun, mit denen wir hantieren können. Es gibt sogenannte primitive Datentypen wie int, char, byte, usw. und komplexe Datentypen.
Bei Instanzen eines primitiven Datentyps (int usw.) handelt es sich um einfache Werte. Deklarierst Du eine Variable z. B. vom Typ int, dann repräsentiert diese Variable eben den betreffenden Wert.
Bei Instanzen komplexer Datentypen speichert die Variable nicht die Instanz (z. B. das String-Objekt) selbst, sondern nur dessen Adresse im Speicher. Die Variable ist also nur eine Referenz auf das jeweilige Objekt. Daher werden die in Java vorhandenen komplexen Datentypen auch als Referenztypen bezeichnet.
Im Code sieht man den Unterschied meist am new-Operator, d. h. wenn ein new-Operator verwendet wird, handelt es sich um einen Referenztypen, der Umkehrschluss ist nicht immer möglich (String-Literale sind z. B. Objekte, ohne dass man new verwenden müsste):
Java:
int x = 5; // primitiver Datentyp, der Wert kann sofort zugewiesen werden
int[] x = new int[5]; // new-Operator -> komplexer Datentyp int-Array.
Nun gibt es eine besondere Referenz null. Dieses null steht praktisch für "kein Objekt".
Beispiel:
Java:
String x = null; // x speichert aktuell die null-Referenz, also keine Referenz auf ein Objekt
Wenn x == null gilt und Du versuchst, auf eine Methode oder Feld von x zuzugreifen, wirst Du mit einer NullPointerException belohnt.
Bezogen auf Dein Beispiel heißt das: der Parameter array in
Java:
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
ist eine Referenz auf eine Instanz des komplexen Datentyps "Array von int-Arrays" und kann null sein, wenn der Aufrufer eine null-Referenz übergibt. Beispiel:
Java:
flatternAndSortWithoutBiggest(null);
// oder auch folgendes, falls x == null gilt
flatternAndSortWithoutBiggest(x);
Wenn Du jetzt in der ersten Zeile
Java:
for(int i = 0; i<array.length;i++) {
auf die Länge des Arrays zugreifst, bekommst Du eben eine NullPointerException, falls zu diesem Zeitpunkt array == null gilt. Das ist auch logisch, denn die "Länge von keinem Array" ergibt keinen Sinn.
Daher musst Du vorher prüfen, ob array == null gilt und entsprechend reagieren.
Und nur als kleiner Hinweis ganz am Rande: Ihr könnt das doch alles Testen!
Ihr schreibt eine Methode und diese muss für alle Fälle getestet werden. Also könnt ihr doch in der main Methode alles erweitern:
Java:
public static void main(String[] args) {
int [][] unsorted = new int [][] { {1,2,3} , {4,5,6} , {7,8,9} };
int [] ergebnis = flatternAndSortWithoutBiggest(unsorted);
System.out.println(Arrays.toString(ergebnis));
unsorted = null;
ergebnis = flatternAndSortWithoutBiggest(unsorted);
System.out.println(Arrays.toString(ergebnis));
unsorted = new int [][] { null , {4,5,6} , {7,8,9} };
ergebnis = flatternAndSortWithoutBiggest(unsorted);
System.out.println(Arrays.toString(ergebnis));
// Und noch mehr Tests ... Was ist, wenn in einem Teilarray nur 1 Element ist
// oder ganz viele an einer Stelle....
}
Generell ist es so, dass bei den Tests jeder Befehl durchlaufen werden sollte. Also wenn ihr array == null Testet, dann muss der Fall getestet werden. array.length == 0 fehlt noch - den Test müsste man noch bauen. Das gleiche für ein inneres Array!
Und es sollte doch viel einfacher sein, etwas selbst zu testen, als im Forum zu fragen.
Danke @mihe7 und @JustNobody , die Geduld und dass ihr sachlich bleibt ist wirklich motivierend. Und ja es ist eigentlich einfach das selbst zu testen, jedoch war ich mir dessen nicht wirklich bewusst, da ich das noch nicht so gemacht hatte , aber mit deinen Beispielen sollte das jetzt auch möglich sein, wenn nicht bitte ich um Geduld wenn ich im Detail etwas nicht verstanden habe