Zweidimensionales array kopieren und in eindimensionales überführen

K

kneitzel

Gast
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 ...
 

jono

Top Contributor
Ja, genau das war die Zeile , hast Recht.
Wie setze ich das dann genau um , return 0 ?
So wahrscheinlich nicht :D Aber was kommt nach dem return?
 

mihe7

Top Contributor
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++)
 

jono

Top Contributor
Java:
1) testNullElementArray(PublicTests)
java.lang.NullPointerException
	at Functionality.flatternAndSortWithoutBiggest(Functionality.java:25)
	at PublicTests.testNullElementArray(PublicTests.java:33)
 
K

kneitzel

Gast
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?
 

jono

Top Contributor
Ich weiß nicht weiter :D 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
 

mihe7

Top Contributor
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?
 

jono

Top Contributor
public static int[] flatternAndSortWithoutBiggest(int[][] array) {
for(int i = 0; i<array.length;i++) {
if (array == null|| array.length == 0) {
return new int[0];

}
}
 

jono

Top Contributor
Habe das hier, trotzdem schlägt der der sogen. ExtraTest noch fehl, der aber nicht angezeigt wird sondern erst nach abgabe deadline
 

mihe7

Top Contributor
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.
 

mihe7

Top Contributor
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.
 

jono

Top Contributor
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];
		}
 

jono

Top Contributor
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?
 
Danke für den Hinweis mit der Schleife, bei mir funktioniert es jetzt. Sobald ein leeres (Teil-) Array eingegeben wird, kommt jetzt [] zurück. Danke an alle für die Hifle!!!
 

jono

Top Contributor
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];
		   }
 

mihe7

Top Contributor
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++) {
 

mihe7

Top Contributor
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.
 

mihe7

Top Contributor
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];
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
Yasemin bahar zweidimensionales Array Java Basics - Anfänger-Themen 5
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
I Java zweidimensionales array befüllen mit for-schleife Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 1
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
X Java zweidimensionales Array Java Basics - Anfänger-Themen 5
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
F Erste Schritte zweidimensionales array Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
K drei eindimensionale Arrays in ein zweidimensionales Array Java Basics - Anfänger-Themen 10
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
W Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen Java Basics - Anfänger-Themen 3
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
C ZweiDimensionales Array erstellen und Spiegeln Java Basics - Anfänger-Themen 1
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
D Zweidimensionales Array ( Java Basics - Anfänger-Themen 2
D Zweidimensionales Array (Länge) Java Basics - Anfänger-Themen 2
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
M Zweidimensionales Array um 1 addieren Java Basics - Anfänger-Themen 3
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
C Methoden Diagonalen am best. Punkt im zweidimensionales array finden Java Basics - Anfänger-Themen 3
S Zweidimensionales Array mit Diagonalen Java Basics - Anfänger-Themen 9
M Zugriffsproblem auf (zweidimensionales) Array in einer ArrayList Java Basics - Anfänger-Themen 15
C Datentypen Zweidimensionales Array mit String und int Java Basics - Anfänger-Themen 3
W Datentypen Zweidimensionales Boolean Array Java Basics - Anfänger-Themen 13
A Zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
C zweidimensionales Array sortieren Java Basics - Anfänger-Themen 6
B Zweidimensionales Array durchsuchen und ändern Java Basics - Anfänger-Themen 8
J Zweidimensionales Array durch ToString ausgeben lassen Java Basics - Anfänger-Themen 21
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
M Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 4
C Zweidimensionales String Array initialisieren Java Basics - Anfänger-Themen 2
S Zweidimensionales Array mit Schleife summieren Java Basics - Anfänger-Themen 2
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
F Datentypen Zweidimensionales Array füllen Java Basics - Anfänger-Themen 6
S zweidimensionales ARRAY Java Basics - Anfänger-Themen 2
S zweidimensionales Array Java Basics - Anfänger-Themen 6
berti99 Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 5
U Zweidimensionales Array mit Eindimensionalem Array Java Basics - Anfänger-Themen 7
J zweidimensionales Array einselen und ausgeben Java Basics - Anfänger-Themen 15
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
M Zweidimensionales Array Java Basics - Anfänger-Themen 3
G zweidimensionales Array vergrößern Java Basics - Anfänger-Themen 3
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales String-Array initialisieren Java Basics - Anfänger-Themen 6
P zweidimensionales Array erstellen Java Basics - Anfänger-Themen 9
D erste spalte eines zweidimensionales Array sortieren ??!! Java Basics - Anfänger-Themen 2
N zweidimensionales 10x10 Feld erstellen Java Basics - Anfänger-Themen 3
D aus 2 arrays ein zweidimensionales formen Java Basics - Anfänger-Themen 9
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
V Zweidimensionales Ganzzahlfeld Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben