Zweidimensionales array kopieren und in eindimensionales überführen

Was kommt dann anstatt der "throw new IllegalArgumentException ("Array null oder leer!");" dahin?
Ein Array der Länge 0 soll zurück gegeben werden.

Und ich würde eher vermuten, dass die NPE in der Zeile mit
n += zweidim[i].length -ignoreCountPerArray;
gekommen ist, denn die Aufgabe testet wohl, ob null innerhalb des zweidimensionalen Arrays ordentlich behandelt wird. Auf jeden Fall kann es nicht die Zeile mit } gewesen sein - evtl. hast Du nach dem Test noch etwas verändert ...
 
Ja, genau das war die Zeile , hast Recht.
Wie setze ich das dann genau um , return 0 ?
So wahrscheinlich nicht 😀 Aber was kommt nach dem return?
 
Nein, eindim ist ja nur eine Variable für ein konkretes eindimensionales Array. Die Frage ist: wie erzeugst Du ganz allgemein ein Array?
 
Hallo zusammen,

vielen Dank für die vielen hilfreichen Tipps bezüglich dieser Aufgabe, diese haben mir sehr bei der Bearbeitung geholfen!
Ich bin leider auch an dem Punkt angekommen, dass alles soweit funktioniert, nur bekomme ich ebenfalls beim testen eine NPE. Der Fehler tritt auf in Zeile 27 mit dem Aufruf der bubbleSort (bubbleSort(unsorted)). Der Fehler tritt ebenfalls auf, wenn ich insertionSort anwende.
Daher vermute ich, dass mein Fehler in den Sortiermethoden liegt, leider stehe ich aber komplett auf dem Schlauch, worin der Fehler liegt. Bin für jede Hilfe dankbar!



Java:
import java.util.Arrays;

public class Functionality {

    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));
        
    }

    public static int[] flatternAndSortWithoutBiggest(int[][] unsorted) {


        int[] rueckgabe;
        int[] leer = new int[0];
            
        if (unsorted.length == 0 || unsorted == null) {    
            return leer;
        } else {        
         
            
        for (int i = 0; i < unsorted.length; i++) {            
                        bubbleSort(unsorted[i]);
        }
                        
        int counter = 0;
                
        for (int i = 0; i < unsorted.length; i++) {
                    counter = counter + unsorted[i].length -1;    
        }
            
        rueckgabe = new int[counter];
                
        int temp = 0;
                
        for (int i = 0; i < unsorted.length; i++) {
            for(int j = 1; j < unsorted[i].length; j++) {
                rueckgabe[temp] = unsorted[i][j];
                temp++;
            }
        }
                
        insertionSort(rueckgabe);
                
        return rueckgabe;
                
        }
        
    }
            
        
        public static void bubbleSort(int[] array) {    
            boolean swapped;
            do {
                swapped = false;
                for (int i = 1; i < array.length; i++)
                    if (array[i - 1] < array[i]) {
                        int swap = array[i];
                        array[i] = array[i - 1];
                        array[i - 1] = swap;
                        swapped = true;
                    }
            
         } while (swapped);

        }
        
        
        public static void insertionSort(int[] array) {
            for (int i = 1; i < array.length; i++) {
                int x = array[i];
                int j = i;
                while (j > 0 && array[j-1] < x) {
                    array[j] = array[j-1];
                    j--;
                }
                array[j] = x;
            }
        }
            
}
 
Danke für die schnelle Antwort, leider hat das vertauschen der Ausdrücke nichts gebracht, die NPE´s treten weiterhin beim Aufruf der Bubblesort auf. Ich hatte im ursprünglichen Post vergessen den zweiten auftretenden Fehler zu erwähnen, sorry. Vielleicht ist das ja die Ursache. Fehlermeldung in Zeile 60 bei:
Java:
for (int i = 1; i < array.length; i++)
 
Java:
1) testNullElementArray(PublicTests)
java.lang.NullPointerException
	at Functionality.flatternAndSortWithoutBiggest(Functionality.java:25)
	at PublicTests.testNullElementArray(PublicTests.java:33)
 
Du musst vorher prüfen, ob das Element von array, mit dem Du etwas machen willst, nicht null ist.

Also wenn Du wissen willst, ob Du ein Stift auf dem Tisch liegt, dann misst Du die Länge? Und wenn die Länge positiv ist, dann ist da ein Stift? Wie misst man die Länge eines nicht vorhandenen Stiftes? 🙂
 
Sobald ich null in unsorted einsetze, bekomme ich bei der Programmausführung die identischen Fehler wie beim Testen. Sorry, wenn die Frage dumm wirkt, aber wie hilft mir das bei der Fehlerfindung weiter?
 
Ich weiß nicht weiter 😀 Für mich ist es logisch zu sagen, wenn:
Stift == null ist oder ==0 , dann ist auch keiner vorhanden, das ist
ja nichts anders als was die if Bedingung sagt. Mehr kann ich mir
dazu echt nicht ausmalen
 
Sorry, wenn die Frage dumm wirkt, aber wie hilft mir das bei der Fehlerfindung weiter?
Du kannst den Fehler lokal reproduzieren. Das hilft ungemein.

Und dann nochmal der Aufgabentext: "Sollte irgendein Array "null" sein oder leer sein, dann soll ein leeres Array der Länge 0 ( {} ) zurückgegeben werden."

Das übergeben array ist ein Array von Arrays. Bislang habt ihr nur überprüft, ob array null oder leer ist, aber noch nicht ob die darin enthaltenen Arrays null oder leer sind.
 
Danke, ich glaube ich weiß worauf du hinaus möchtest. Bitte korrigiere mich, wenn ich falsch liege, aber das bedeutet:
-die if abfrage bezüglich null/length=0 muss in eine Schleife gepackt werden, die beide Indizes (z.b. i,j) hochzählt um somit alle arrays des array durchzutesten?
 
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
for(int i = 0; i<array.length;i++) {
if (array == null|| array.length == 0) {
return new int[0];

}
}
 
Habe das hier, trotzdem schlägt der der sogen. ExtraTest noch fehl, der aber nicht angezeigt wird sondern erst nach abgabe deadline
 
Danke, ich glaube ich weiß worauf du hinaus möchtest. Bitte korrigiere mich, wenn ich falsch liege, aber das bedeutet:
-die if abfrage bezüglich null/length=0 muss in eine Schleife gepackt werden, die beide Indizes (z.b. i,j) hochzählt um somit alle arrays des array durchzutesten?
Fast:
1. die Schleife ist natürlich zusätzlich und
2. Du brauchst nur eine Schleife. Die innere Schleife würde auf einzelne int-Werte zugreifen und das sind weder Arrays noch können sie null werden.
 
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
for(int i = 0; i<array.length;i++) {
if (array == null|| array.length == 0) {
return new int[0];

}
}
Kannst Du Deinen Code hier in Code-Tags reinstellen? Sonst gehen die i-Indizes verloren, weil der Editor meint, Du willst etwas kursiv schreiben.
 
Java:
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
		for(int i = 0; i<array.length;i++) {
		if (array[i] == null || array[i].length == 0) 
			return new int[0];
		}
 
Java:
Erstellen Sie die Klasse Functionality.java und bearbeiten Sie die folgende Aufgabe:

Implementieren Sie eine statische-public-Methode mit dem Namen "flatternAndSortWithoutBiggest", welche ein zweidimensionales Integer-Array erhält und ein eindimensionales Integer-Array zurückgibt.

Die Methode soll die Werte aus den einzelnen Arrays nehmen und in ein eindimensionales Array kopieren. Dabei soll aus jedem einzelnen Array jeweils die größte Zahl weggelassen werden. Das resultierende Array soll mit Bubble-,Selection- oder Insertionsort absteigend sortiert werden.

Achten Sie darauf, dass die einzelnen Arrays unterschiedliche Größen haben können.
Sollte irgendein Array "null" sein oder leer sein, dann soll ein leeres Array der Länge 0 ( {} ) zurückgegeben werden.

Bsp.: flatternAndSortWithoutBiggest(new int[][]{{1,11,3,2},{5,-4,6,2,4,2},{8,9,7}}) gibt das Array {8, 7, 5, 4, 3, 2, 2, 2, 1, -4} zurück.

Diese Aufgabe soll erfüllt werden, das müsste doch jetzt erledigt sein.
Der Public Test ist korrekt nur der andere nicht frage mich woran es liegen kann
oder kann es an dem gerade geschickten Code liegen ? Was meinst du?
 
Java:
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
		for(int i = 0; i<array.length;i++) {
		if (array[i] == null || array[i].length == 0) 
			return new int[0];
		}
		   if(array == null|| array.length == 0){
			   return new int[0];
		   }
 
Sag mal, womit formatierst Du Deinen Code?!? Das ist ja schrecklich.

Jetzt überleg mal, was an der Stelle passiert, wenn array == null gilt:
Java:
        for(int i = 0; i<array.length;i++) {
 
OK, ich gebs auf:
Java:
           if(array == null|| array.length == 0){
               return new int[0];
           }
muss an den Anfang der Methode, erst danach kannst Du mit Deiner Schleife weitermachen.
 
Ne eckige Klammern mit i drin?
Du sollst einfach die beiden Blöcke umdrehen:
Java:
    public static int[] flatternAndSortWithoutBiggest(int[][] array) {
        if(array == null|| array.length == 0){
           return new int[0];
        }
        for(int i = 0; i<array.length;i++) {
            if (array[i] == null || array[i].length == 0) 
                return new int[0];
        }
 

Zurück
Oben