2d array ohne längen anlegen

Max1221

Mitglied
Hey,
ich hab ihr ein kleines Problem mit meinem Programm, ich habe ein 2d Array angelegt ohne die Länge an zu geben, weil ich sie nicht weiß aber irgendwie will das Programm nicht das Array annehmen und zeigt mir die ganze Zeit Fehler an. Wie muss ich das Array schreiben, damit ich keine Fehler habe aber es auch unbegrenzt lang ist.
 
Kannst Du genau sagen, was Du machen willst bzw. was für Code du hast und was für eine Fehlermeldung Du bekommst?

Generell ist es so, dass ein Array immer eine exakte Größe hat. Das ist eines der Dinge, die eben ein Array auszeichnet. Somit gibt es kein Array mit "unbegrenzter Länge" oder so.

Du kannst eine Variable deklarieren, die auf ein Array verweisen soll. Wenn Du da noch kein Array anlegst, dann hast Du da eine null Referenz. Du musst dann also ein Array erzeugen und der Variablen zuweisen. Da erzeugst Du dann aber ein Array mit einer konkreten Länge.

Das wird dann auch genau so vorgegeben in der Java Language Specification - die Array Creation Expression ist da beschrieben und die besagt, dass da eine Größe angegeben werden muss (bei mehreren Dimensionen mindestens die erste Dimension).
 
Die Aufgabenstellung ist es ein 1d Array in ein 2d Array zu speichern. Wobei das 1d Array zur Hälfte in die 1 Zeile und die andere Hälfte in 2 Zeile des 2d Arrays gespeichert wird.
Ich habe versucht das 2d Array eine Größe zu geben aber irgendwie funktioniert das Programm immer noch nicht.
Screenshot 2022-11-18 130153.png
 
Kannst Du genau sagen, was Du machen willst bzw. was für Code du hast und was für eine Fehlermeldung Du bekommst?

Generell ist es so, dass ein Array immer eine exakte Größe hat. Das ist eines der Dinge, die eben ein Array auszeichnet. Somit gibt es kein Array mit "unbegrenzter Länge" oder so.

Du kannst eine Variable deklarieren, die auf ein Array verweisen soll. Wenn Du da noch kein Array anlegst, dann hast Du da eine null Referenz. Du musst dann also ein Array erzeugen und der Variablen zuweisen. Da erzeugst Du dann aber ein Array mit einer konkreten Länge.

Das wird dann auch genau so vorgegeben in der Java Language Specification - die Array Creation Expression ist da beschrieben und die besagt, dass da eine Größe angegeben werden muss (bei mehreren Dimensionen mindestens die erste Dimension).
Die Aufgabenstellung ist es ein 1d Array in ein 2d Array zu speichern. Wobei das 1d Array zur Hälfte in die 1 Zeile und die andere Hälfte in 2 Zeile des 2d Arrays gespeichert wird.
Ich habe versucht das 2d Array eine Größe zu geben aber irgendwie funktioniert das Programm immer noch nicht.
 

Anhänge

  • Screenshot 2022-11-18 130153.png
    Screenshot 2022-11-18 130153.png
    45 KB · Aufrufe: 0
Ok, damit hast Du es doch schon fast. Bei so Fragen ist immer die Frage: Was genau funktioniert nicht? Das würde es uns einfacher machen, dir weiter zu helfen:

Es gibt ein paar Probleme, die ich sehe. Fangen wir mal mit den einfachen Dingen an:

a) (Schönheit) Die Berechnung der Hälfte ist - sagen wir mal - kreativ 🙂
Bei einem ungeraden Integer reicht ein / 2 - denn es kommt ja ein Integer heraus. Ein -1 wird also nicht benötigt. Die Hälfte ist dann also ein length/2 + 1. Und wenn man das noch umschreibt zu if (length % 2 == 0) haelfte = length/2 + 0 else haelfte = length/2 + 1 dann siehst Du: Du addierst jeweils length%2. Damit kannst Du direkt ohne if schreiben:
int haelfte = array.length / 2 + array.length%2;
(Bezeichner habe ich jetzt nicht aus dem Bildschirmfoto heraus gesucht ... Bitte Code in Code Tags schreiben!)

b) (Fehler!) Dein 2D Array ist einfach falsch erzeugt. mit dem [1] hast Du nur den index 0 - Du willst aber doch 2 Elemente unter bringen also index 0 und 1 - die Größe muss also 2 sein.
Das Array, das Du generierst: Ein 2D Array ist ein Array of Arrays. Und wenn Du zwei Arrays haben willst, dann wäre die 2 vorne. Du kannst also erst einmal ein Array erzeugen mit int[][] arr2d = new int[2][];
Damit hast Du nur ein Array erzeugt und die "Unter-Arrays" sind noch null.
nun kannst Du jeweils ein Ziel-Array erzeugen, also z.B.
arr2d[0] = new int[whatever];` (bzw. mit index 1 für das zweite. whatever muss natürlich die Größe sein. Das ist einmal die haelfte und das zweite musst Du wieder dynamisch angeben. Da kannst Du Dir überlegen, wie Du das machen kannst. Ich selbst hätte da einfach gesagt: die restlichen Elemente sollen da rein - wie viel sind die restlichen Elemente?
Im Anschluss kannst Du das erstellte Array füllen. Dazu kannst Du eine Schleife universell laufen lassen von 0 bis < length des zu füllenden Arrays.

Das nur als ein paar Ideen. Den eigentlichen Fehler habe ich fett markiert.
 

Neue Themen


Zurück
Oben