Zweidimensionales Array in der ersten Zeile deklarieren

überlebender

Aktives Mitglied
Ich möchte ein zweidimensionales double-Array (Dimension [2] [15] ) deklarieren und in der ersten Zeile mit den Werten {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01} initialisieren.

Ich bin gerade völlig am verzweifeln, weil ich im Internet nur zwei Optionen finde: Entweder nur die Dimension des Arrays zu deklarieren oder es sofort zu initialisieren.

Screenshot 2023-11-24 083022.jpg

Hab das hier gefunden, hilft mir aber keineswegs weiter. Hier wird in der ersten Zeile ein Array mit den Dimensionen [2] [3] deklariert.
In der zweiten Zeile wird ein neues zweidimensionalen Array deklariert. Es hat aber nicht mehr die Dimensionen [2] [3]
 

Robertop

Bekanntes Mitglied
In der ersten Zeile erstellst du ein neues int Array mit den Dimensionen 2,3 und legst es auf die Variable "twoDimMatrix".
In der zweiten Zeile erstellst du dann wieder ein neues Array mit den Werten 1,2 und 2,3 und legst es wieder auf die Variable "twoDimMatrix".

Du überschreibst also in Zeile zwei direkt wieder das Array aus Zeile eins. Das neue Array hat dann die Dimensionen 2,2. Wenn ich das richtig sehe, dann müsstest du in Zeile zwei new int[][] {{1,2,0}, {2,3,0}}; eintragen, um so ein Array zu bekommen, wie du da erwartest. Je größer das fertige Array wird, um so umständlicher wird das dann aber.

Was genau willst du denn mit diesem zweidimensionalen Array bezwecken? Vielleicht gibt es für den Anwendungsfall einen besseren Weg.
 

überlebender

Aktives Mitglied
Erstmal danke für die Antwort. Bezwecken will ich mit dem Array folgendes:

1. Ein Geldbetrag € soll in möglichst wenig Scheine und / oder Münzen zerlegt werden.
2. Dazu soll ich zuerst die Variable int input = z.B. 100 deklarieren und dann das Array einheiten mit 2 Zeilen und 15 Spalten:
Screenshot 2023-11-24 090500.jpg

Screenshot 2023-11-24 090653.jpg


Mit der Aufgabe selbst habe ich noch gar nicht begonnen. Wie man sieht scheitere ich schon bei der Deklaration.....
 

Robertop

Bekanntes Mitglied
Wenn das wirklich so sein muss, wäre glaube ich die einfachste Lösung, das zuerst in Zeile eins mit der richtigen Größe zu deklarieren, also double[][] einheiten = new double[2][15], und dann in Zeile zwei nur die erste Zeile des Arrays neu zu setzen, also einheiten[0] = new double[] {500, 200, 100, ...}. Richtig schön ist das aber eigentlich nicht, weil, wenn man nicht aufpasst, kann es da wie erwähnt passieren, dass das 2D Array nicht mehr rechteckig ist.

Was ist mich jetzt eher Frage, ist, wieso die Werte und die Anzahl der Geldstücke unbedingt im selben Array sein müssen. Das macht doch eigentlich nur die "Anzahl" unnötiger Weise zu einer Kommazahl. Außerdem kann es auch passieren, dass durch die Verwendung von double am Ende sowas rauskommt wie 62.78888888889€ oder so...
 

überlebender

Aktives Mitglied
Wenn das wirklich so sein muss, wäre glaube ich die einfachste Lösung, das zuerst in Zeile eins mit der richtigen Größe zu deklarieren, also double[][] einheiten = new double[2][15], und dann in Zeile zwei nur die erste Zeile des Arrays neu zu setzen, also einheiten[0] = new double[] {500, 200, 100, ...}. Richtig schön ist das aber eigentlich nicht, weil, wenn man nicht aufpasst, kann es da wie erwähnt passieren, dass das 2D Array nicht mehr rechteckig ist.

Was ist mich jetzt eher Frage, ist, wieso die Werte und die Anzahl der Geldstücke unbedingt im selben Array sein müssen. Das macht doch eigentlich nur die "Anzahl" unnötiger Weise zu einer Kommazahl. Außerdem kann es auch passieren, dass durch die Verwendung von double am Ende sowas rauskommt wie 62.78888888889€ oder so...
Man soll bei der Aufgabe auch runden und Rundungsfehler berücksichtigen.

So habe ich mir das mit dem Array anfangs auch gedacht nur sollen wir das laut dem Prof alles in eine Zeile schreiben, weil das automatisierte Testprogramm nur die Werte im Arrray ändert. Die Dimensionen müssen also immer [2] [15] bleiben.

Also kurz gesagt: Diese Aufgabe ist der letzte Sch****
Ich erstelle jetzt im Forum ein neues Thema zu dieser Aufgabe, sonst raubt es mir noch die Seele. Ich sitze seit schon Tagen an dem Mist und habe keine Zeit weil ich noch Milliarden andere Aufgaben in Mathe und weiß der Ochse was bearbeiten muss.

Danke für die Hilfe. Die Initialisierung hat wenigstens schonmal geklappt, was ein Erfolg🥴
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal rein zur Aufgabe:
Array einheiten mit 2 Zeilen und 15 Spalten:
Wenn das so vorgegeben ist, dann entfällt jede weitere Diskussion, wie man es anders lösen könnte.

Dann ist wichtig: Es gibt eine Deklaration und eine Initialisierung!
Die Deklaration war doch korrekt und war auch nicht groß anders machbar:
double [][] einheiten;

Das ist die Deklaration. Man kann es dann initialisieren. Dabei ist dann Dir überlassen, was Du wie machen willst. Da alle Werte vorgegeben sind, macht eine Initialisierung per "array creation expression" bei der Deklaration sinnvoll.
Das führt dann tatsächlich zu einem Aufbau wie bereits in #1 selbst (jedoch mit einem int Array) gezeigt hast.

Alternativ ist es natürlich nicht falsch, einfach das Array in der gewünschten Größe zu erstellen und dann die Werte einzeln zuzuweisen. Da wären die 0 Zuweisungen in der zweiten Reihe unnötig, da ein Array am Anfang automatisch auf "Null Werte" initialisiert wird.

Und natürlich ist auch eine Mischung möglich:
Du kannst ein Array aus 2 Arrays erzeugen. Das erste Array fügst Du dann hinzu über die array creation expression und das zweite erzeigst Du nur in der Größe,

Und ich denke, dass es hier rein um erste Erfahrungen mit 2D Arrays geht. Daher probiere alle drei Wege einmal aus.

In einer realen Anwendung würde man das eh objektorientiert machen und man eher selten Werte so in Arrays zusammen gepackt. Aber nach meinem Verständnis für die Aufgabe und den Stand des TE muss man dies in an dieser Stelle nicht ausführen.
 

Robertop

Bekanntes Mitglied
So habe ich mir das mit dem Array anfangs auch gedacht nur sollen wir das laut dem Prof alles in eine Zeile schreiben, weil das automatisierte Testprogramm nur die Werte im Arrray ändert. Die Dimensionen müssen also immer [2] [15] bleiben.

Ehrlich gesagt ist mir immer noch nicht ganz klar, wie man da "alles in eine Zeile" bekommt. 🤔

Wie hast du das denn jetzt gelöst?
 

überlebender

Aktives Mitglied
Also erst einmal rein zur Aufgabe:

Wenn das so vorgegeben ist, dann entfällt jede weitere Diskussion, wie man es anders lösen könnte.

Dann ist wichtig: Es gibt eine Deklaration und eine Initialisierung!
Die Deklaration war doch korrekt und war auch nicht groß anders machbar:
double [][] einheiten;

Das ist die Deklaration. Man kann es dann initialisieren. Dabei ist dann Dir überlassen, was Du wie machen willst. Da alle Werte vorgegeben sind, macht eine Initialisierung per "array creation expression" bei der Deklaration sinnvoll.
Das führt dann tatsächlich zu einem Aufbau wie bereits in #1 selbst (jedoch mit einem int Array) gezeigt hast.

Alternativ ist es natürlich nicht falsch, einfach das Array in der gewünschten Größe zu erstellen und dann die Werte einzeln zuzuweisen. Da wären die 0 Zuweisungen in der zweiten Reihe unnötig, da ein Array am Anfang automatisch auf "Null Werte" initialisiert wird.

Und natürlich ist auch eine Mischung möglich:
Du kannst ein Array aus 2 Arrays erzeugen. Das erste Array fügst Du dann hinzu über die array creation expression und das zweite erzeigst Du nur in der Größe,

Und ich denke, dass es hier rein um erste Erfahrungen mit 2D Arrays geht. Daher probiere alle drei Wege einmal aus.

In einer realen Anwendung würde man das eh objektorientiert machen und man eher selten Werte so in Arrays zusammen gepackt. Aber nach meinem Verständnis für die Aufgabe und den Stand des TE muss man dies in an dieser Stelle nicht ausführen.
Was ich jetzt verstanden habe: Es gibt 2 Möglichkeiten, ein Array zu initialisieren.

1.
Screenshot 2023-11-24 100625.jpg
2.
Screenshot 2023-11-24 101019.jpg
Ich brauche jetzt ein Array mit den Dimensionen [2] [15] und den Werten {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}
in der ersten Zeile. In der zweiten Zeile sollen alle Werte 0.0 sein, sodass mein Array so aussieht: Screenshot 2023-11-24 090500.jpg

Jetzt habe ich das gemacht: Fehler!
Screenshot 2023-11-24 095917.jpg

Laut der Anweisung darf man nicht jeden Wert einzeln zuweisen, weil ich die Lösung an meinen Programmierkurs schicke und ein automatisiertes Testprogramm die Lösung auswertet. Das heißt, das Array muss erzeugt werden [2] [15] und zusätzlich die Werte {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01} in der ersten Zeile haben.

Wie weise ich jetzt der ersten Zeile die o.g Wert zu?
 

mihe7

Top Contributor
Damit gibt es zwei Probleme: 1. ist die zweite Zeile außerhalb von Methoden/Konstruktoren/Initializerblöcken unzulässig, 2. fehlt hier ein new double[] (edit: int ersetzt) vor der geschweiften Klammer.

Streng genommen ist die Aufgabe in der Form gar nicht lösbar, weil es eine Deklaration eines 2x15-Arrays in Java ohne Initialisierung nicht gibt. Jetzt kommt es halt darauf an, wie man "in der ersten Zeile mit den Werten {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01} initialisieren" interpretiert.

Entweder man ersetzt die erste "Zeile" mit einem neuen Array, oder aber man schreibt die Werte in die erste Zeile.

Nachtrag:
Java:
public class Test {
    public static void main(String[] args) {
        double[][] einheiten = new double[2][15];
        einheiten[0] = new double[]{500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
        for (double[] zeile : einheiten) {
            System.out.println(java.util.Arrays.toString(zeile));
        }
    }
}
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Die Aufgabe sieht so aus:
Okay, das war vorhin noch nicht da. Ich würde in dem Fall tatsächlich einfach schreiben:
Java:
public class Test {
    static double[][] einheiten = {
        {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01},
        new double[15]
    };

    public static void main(String[] args) {
        System.out.println("Anzahl Zeilen: " + einheiten.length);
        for (int i = 0; i < einheiten.length; i++) {
            System.out.printf("Zeile %d, Anzahl Spalten: %d, %s%n", i+1, einheiten[i].length, java.util.Arrays.toString(einheiten[i]));
        }
    }
}

Liefert
Code:
Anzahl Zeilen: 2
Zeile 1, Anzahl Spalten: 15, [500.0, 200.0, 100.0, 50.0, 20.0, 10.0, 5.0, 2.0, 1.0, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
Zeile 2, Anzahl Spalten: 15, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

Nachtrag: wenn es Dir besser gefällt, kannst Du natürlich auch einen static Initializerblock verwenden:
Java:
public class Test {
    static double[][] einheiten = new double[2][15];
  
    static {
        einheiten[0] = new double[]{500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
    }

    public static void main(String[] args) {
        System.out.println("Anzahl Zeilen: " + einheiten.length);
        for (int i = 0; i < einheiten.length; i++) {
            System.out.printf("Zeile %d, Anzahl Spalten: %d, %s%n", i+1, einheiten[i].length, java.util.Arrays.toString(einheiten[i]));
        }
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
@mihe7 hat mit jetzt schon alles recht schön zusammen geschrieben.

Aber die Version, die doch sofort in den Sinn kommen sollte: Du hast ein 2D Array und du kennst alle Werte. Also setzt Du die Werte alle:
double [][] test = { { 1.0, 2.0, 3.0 }, { 0.0, 0.0, 0.0 } };

Jetzt einfach nur um es mal kürzer zu zeigen und daher auch ein anderer Name und nicht einheiten.

Das wäre im Source dann auf zwei Zeilen verteilt, so dass die jeweiligen Werte untereinander stehen. Das reduziert die Gefahr, dass man eine unterschiedliche Anzahl Werte hat.

Und Zuweisungen außerhalb des Deklaration müssen in einer Methode stehen. So einen static Block würde ich nie machen. Die typische Lösung auch im Sinne von Clean Code ist, so Code in eine Methode zu packen:

double [][] einheiten = createEinheitenArray();

Die Frage ist, was dieses "alles in eine Zeile schreiben" vom Prof. bedeutet. Ist es ein Verbot von so Methoden? Von static Blöcken? Oder ist es nur ein dezenter Hinweis, dass das Array direkt erstellt worden sein muss? Da wäre so eine Methode ok, denn die wird ja direkt aufgerufen, d.h. ehe das Testprogramm auf die Variable zugreifen kann, wurde sie initialisiert.
 

KonradN

Super-Moderator
Mitarbeiter
Also wegen dem Hinweis
2. fehlt hier ein new double[]
ein Hinweis, wann das notwendig ist und wann nicht.

Wenn Du ein Array mit { ... } angibst, dann ist dies ein Array Initializer.

Diese sind nur erlaubt bei der Deklaration eines Feldes (Instanz- oder Klassenvariable, im Englischen als field bezeichnet), lokalen Variablen oder in Zusammenhang mit einem Array Creation Statement (Also dem new gefolgt vom Typ und den eckigen Klammern)

Daher konntest Du direkt bei der Deklaration das new double[][] weglassen. Du hättest es aber auch hinschreiben können - es wäre nicht falsch gewesen. Es ist aber unnötig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
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