Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main()

killermuck

Mitglied
Javascript:
//für das Einlesen
import javax.swing.*;

//für die Sonderfunktionen der Arrays
import java.util.Arrays;

public class Einsendeaufgabe_4 {
    static int kistenNummer; //Variable als Klassenvariable gesetzt, da diese überall bekannt sein soll
        
    //Methode1 - neue Kiste erfassen
    static int[][] neueKiste(int[][] argneueKiste) {
        int länge, breite, höhe;
        String nKisteEinlesen = null; //String-Variable für den Eingabedialog
        char nKisteFunktionWahl; //charVariable um nur das erste Zeichen der Eingabe zu verwenden
        boolean nKisteBeenden = false; //Flag-Variable für Endlosschleife   
        
        do { //Schleife zum beenden der Kisteneingabe
            
        do { //neue Kiste eingeben
            kistenNummer = Integer.parseInt(JOptionPane.showInputDialog("Bitte die Nummer der neuen Kiste eingeben"));
            // Prüfung, ob Eingabe innerhalb des Gültigkeitsbereichs von kistenNummer 1-75 liegt
            if (kistenNummer >0 || kistenNummer <=75) {
            //Prüfung, ob die Kiste schon vorhanden ist, wenn nein, dann Daten eingeben
                
                if (argneueKiste[kistenNummer-1][0] == 0) {
                
                //Wert kistenNummer dem Array werte zuweisen
                argneueKiste[kistenNummer-1][0]=kistenNummer;
                
                //Werte für länge, breite und höhe einlesen und dem Array zuweisen
                länge = Integer.parseInt(JOptionPane.showInputDialog("Kistenlänge"));
                argneueKiste[kistenNummer-1][1]=länge;
                
                breite = Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                argneueKiste[kistenNummer-1][2]=breite;
                
                höhe = Integer.parseInt(JOptionPane.showInputDialog("Kistenhöhe"));
                argneueKiste[kistenNummer-1][3]=höhe;
                
                }
                else System.out.println("Diese Kistennummer ist bereits vorhanden,\bitte versuchen Sie es erneut!");
            }
            else System.out.println("Die Eingabe war nicht korrekt!\nDer Wert muss von 1 - 75 sein");
            }
            
        while(kistenNummer <= 0 || kistenNummer>argneueKiste.length);
            nKisteBeenden = true;
            }
        while(nKisteBeenden == false); //Ende der Kisteneingabe
        
        nKisteBeenden = true;
        
        return argneueKiste; //Übergabe der Werte - KistenNummer, länge, breite, höhe - aus der Methode an main()
    }
    
public static void main(String[] args) {
        int[][] aKistenArray = new int [75][4]; //Zweidimensionaler Array 4 Spalten / 75 Zeilen
        String funktionEinlesen = null; //String-Variable für den Eingabedialog
        char funktionWahl; //charVariable um nur das erste Zeichen der Eingabe zu verwenden
        int i = 1; //Variable für Endlosschleife um main() am Laufen zu halten
        
        for (i = 1; i > 0; i++) { //bewusste Endlosschleife, da das Programm laufen muss, damit die Werte der Variablen nicht verloren gehen!!!!

        //Eingabe der gewünschten Funktion
        funktionEinlesen = JOptionPane.showInputDialog("Bitte wählen Sie die gewüschte Funktion aus: \n1 = neue Kiste erfassen \n2 = Kiste löschen \n3 = Kiste ändern \n4 = Kiste suchen und Wete anzeigen \n5 = Kisten in einer Liste anzeigen \n6 = Programm beenden");
        // nur das erste Zeichen nehmen
        funktionWahl = funktionEinlesen.charAt(0);
        //die Auswertung von funktionWahl
        switch (funktionWahl) {
        //der case-Zweig für 1
        case '1':
            //Methode1 - Kiste neu eingeben
            neueKiste(aKistenArray); //übergabe der Werte von aKistenArray in die Methode neueKiste
            //übergabe der Werte aus argneueKiste in aKistenArray
            //System.arraycopy(wert, kistenNummer-1, aKistenArray], kistenNummer-1, 4);
            //aKistenArray = Arrays.copyOf(argneueKiste(10, 20, 30, 40),4);
            
            //Ausgabe der übergebenen Werte aus aKistenArray
            System.out.println("\nSie haben folgende Kiste neu erfasst:");
            System.out.println("Nr.\tlänge\tbreite\thöhe");
            System.out.println(aKistenArray[kistenNummer-1][0] + "\t" + aKistenArray[kistenNummer-1][1] + "\t" + aKistenArray[kistenNummer-1][2] + "\t" + aKistenArray[kistenNummer-1][3]);
            i = 1; //Wert für die Endlosschleife
            break;
            //der case-Zweig für 2
        case '2':
            System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
            //löschenKiste (kistenArray);
            break;
            //der case-Zweig für 3
        case '3':
            System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
            //ändernKiste (kistenArray);
            break;
            //der case-Zweig für 4
        case '4':
            kisteSuchen(aKistenArray);
            break;
            //der case-Zweig für 5
        case '5':
            System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
            kisteListe(aKistenArray);
            break;
            //der case-Zweig für 6
        case '6':
            //Programm beenden?
            i = 0;
            System.exit(0);
            break;   
        //für alle anderen Eingaben
        default:
            System.out.println("\nSie haben keine gültige Auswahl getroffen!");
        } //hier endet die Auswertung von funktionWahl
        }
    }


    
    }
Hallo,

ich habe jetzt schon so viele Varianten durchgetestet und weiß einfach nicht mehr weiter.

In meinem Code werden die Werte aus der Methode neueKiste an das Array in main() "aKistenArray weitergeben und auch ausgegeben.
Allerdings werden die Werte nicht über Arrays.copyOf oder System.arraycopy in aKistenArray kopiert, was wohl
programmiertechnisch nicht korrekt ist.

Kann mir jemand sagen, wie ich das Problem lösen kann?

Vielen dank im Voraus für eure Hilfe.
Bin mittlerweile schon am verzweifeln!!!!
 
B

BestGoalkeeper

Gast
werden die Werte nicht über Arrays.copyOf oder System.arraycopy in aKistenArray kopiert, was wohl
programmiertechnisch nicht korrekt ist
Schreib dir doch gerade eine Hilfs-Methode:
Java:
	public static int[][] copyArray(int[][] intArr) {
		int[][] b = new int[intArr.length][];
		for (int i = 0; i < intArr.length; i++) {
			b[i] = Arrays.copyOf(intArr[i], intArr[i].length);
		}
		return b;
	}
 

mrBrown

Super-Moderator
Mitarbeiter
Allerdings werden die Werte nicht über Arrays.copyOf oder System.arraycopy in aKistenArray kopiert, was wohl
programmiertechnisch nicht korrekt ist.
Warum sollte das nicht korrekt sein?

neueKiste verändert das übergebene Array, "fügt" also quasi "dem Lager" die Kiste hinzu. Weil das Array verändert wird, ist die Rückgabe überflüssig, die nutzt du aber sowieso nicht.
 

mihe7

Top Contributor
@killermuck bitte den Code mit vernünftigen Einrückungen posten, das ist sonst sehr schwer zu lesen:
Java:
//für das Einlesen
import javax.swing.*;

//für die Sonderfunktionen der Arrays
import java.util.Arrays;

public class Einsendeaufgabe_4 {
    static int kistenNummer; //Variable als Klassenvariable gesetzt, da diese überall bekannt sein soll
        
    //Methode1 - neue Kiste erfassen
    static int[][] neueKiste(int[][] argneueKiste) {
        int länge, breite, höhe;
        String nKisteEinlesen = null; //String-Variable für den Eingabedialog
        char nKisteFunktionWahl; //charVariable um nur das erste Zeichen der Eingabe zu verwenden
        boolean nKisteBeenden = false; //Flag-Variable für Endlosschleife   
        
        do { //Schleife zum beenden der Kisteneingabe
            
            do { //neue Kiste eingeben
                kistenNummer = Integer.parseInt(JOptionPane.showInputDialog("Bitte die Nummer der neuen Kiste eingeben"));
                // Prüfung, ob Eingabe innerhalb des Gültigkeitsbereichs von kistenNummer 1-75 liegt
                if (kistenNummer >0 || kistenNummer <=75) {
                //Prüfung, ob die Kiste schon vorhanden ist, wenn nein, dann Daten eingeben
                    
                    if (argneueKiste[kistenNummer-1][0] == 0) {
                    
                    //Wert kistenNummer dem Array werte zuweisen
                    argneueKiste[kistenNummer-1][0]=kistenNummer;
                    
                    //Werte für länge, breite und höhe einlesen und dem Array zuweisen
                    länge = Integer.parseInt(JOptionPane.showInputDialog("Kistenlänge"));
                    argneueKiste[kistenNummer-1][1]=länge;
                    
                    breite = Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                    argneueKiste[kistenNummer-1][2]=breite;
                    
                    höhe = Integer.parseInt(JOptionPane.showInputDialog("Kistenhöhe"));
                    argneueKiste[kistenNummer-1][3]=höhe;
                    
                    }
                    else System.out.println("Diese Kistennummer ist bereits vorhanden,\bitte versuchen Sie es erneut!");
                }
                else System.out.println("Die Eingabe war nicht korrekt!\nDer Wert muss von 1 - 75 sein");
            } while(kistenNummer <= 0 || kistenNummer>argneueKiste.length);

            nKisteBeenden = true;
        } while(nKisteBeenden == false); //Ende der Kisteneingabe
        
        nKisteBeenden = true;
        
        return argneueKiste; //Übergabe der Werte - KistenNummer, länge, breite, höhe - aus der Methode an main()
    }
    
    public static void main(String[] args) {
        int[][] aKistenArray = new int [75][4]; //Zweidimensionaler Array 4 Spalten / 75 Zeilen
        String funktionEinlesen = null; //String-Variable für den Eingabedialog
        char funktionWahl; //charVariable um nur das erste Zeichen der Eingabe zu verwenden
        int i = 1; //Variable für Endlosschleife um main() am Laufen zu halten
        
        for (i = 1; i > 0; i++) { //bewusste Endlosschleife, da das Programm laufen muss, damit die Werte der Variablen nicht verloren gehen!!!!

            //Eingabe der gewünschten Funktion
            funktionEinlesen = JOptionPane.showInputDialog("Bitte wählen Sie die gewüschte Funktion aus: \n1 = neue Kiste erfassen \n2 = Kiste löschen \n3 = Kiste ändern \n4 = Kiste suchen und Wete anzeigen \n5 = Kisten in einer Liste anzeigen \n6 = Programm beenden");
            // nur das erste Zeichen nehmen
            funktionWahl = funktionEinlesen.charAt(0);
            //die Auswertung von funktionWahl
            switch (funktionWahl) {
            //der case-Zweig für 1
            case '1':
                //Methode1 - Kiste neu eingeben
                neueKiste(aKistenArray); //übergabe der Werte von aKistenArray in die Methode neueKiste
                //übergabe der Werte aus argneueKiste in aKistenArray
                //System.arraycopy(wert, kistenNummer-1, aKistenArray], kistenNummer-1, 4);
                //aKistenArray = Arrays.copyOf(argneueKiste(10, 20, 30, 40),4);
                
                //Ausgabe der übergebenen Werte aus aKistenArray
                System.out.println("\nSie haben folgende Kiste neu erfasst:");
                System.out.println("Nr.\tlänge\tbreite\thöhe");
                System.out.println(aKistenArray[kistenNummer-1][0] + "\t" + aKistenArray[kistenNummer-1][1] + "\t" + aKistenArray[kistenNummer-1][2] + "\t" + aKistenArray[kistenNummer-1][3]);
                i = 1; //Wert für die Endlosschleife
                break;
                //der case-Zweig für 2
            case '2':
                System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
                //löschenKiste (kistenArray);
                break;
                //der case-Zweig für 3
            case '3':
                System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
                //ändernKiste (kistenArray);
                break;
                //der case-Zweig für 4
            case '4':
                kisteSuchen(aKistenArray);
                break;
                //der case-Zweig für 5
            case '5':
                System.out.println("Sie haben die Auswahl: " + funktionEinlesen + "getroffen.");
                kisteListe(aKistenArray);
                break;
                //der case-Zweig für 6
            case '6':
                //Programm beenden?
                i = 0;
                System.exit(0);
                break;   
            //für alle anderen Eingaben
            default:
                System.out.println("\nSie haben keine gültige Auswahl getroffen!");
            } //hier endet die Auswertung von funktionWahl
        }
    }    
}

Eine Frage: soll man vor lauter Kommentaren den Code nicht mehr sehen können? Ich meine, dokumentieren ist ja nett und schön und in der Ausbildung wird da gerne Ausführlichkeit verlangt, aber den Quelltext ins Deutsche zu übersetzen, kann ja nun auch nicht Sinn und Zweck der Sache sein. Zum Beispiel
Java:
    //der case-Zweig für 6
case '6':

Was soll die äußere Schleife in neueKiste bringen?
Wozu eine Endlosschleife in main, wenn es doch case 6 gibt?
Wenn Du aKistenArray z. B. mit 70 deklarierst, funktioniert Dein Code dann noch?
Darfst Du eigene Methoden erstellen? Wenn ja, warum strukturierst Du dann Deinen Code nicht etwas besser?
In dem Zusammenhang: gibt es für länge, beite, höhe nicht auch einen Wertebereich?
Jetzt höre ich mal auf ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Übergabe von Werten Java Basics - Anfänger-Themen 10
P Methoden Übergabe von Werten Java Basics - Anfänger-Themen 7
E Übergabe von werten aus einem JDialog Java Basics - Anfänger-Themen 4
M Problem bei der Übergabe von Werten Java Basics - Anfänger-Themen 7
D Fragen zu Methoden und Übergabe von Werten Java Basics - Anfänger-Themen 4
D Problem bei Übergabe von Werten an eine Methode Java Basics - Anfänger-Themen 2
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
L Methoden Übergabe von Parameter Java Basics - Anfänger-Themen 3
K Java Problem mit Übergabe von argumenten Java Basics - Anfänger-Themen 3
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
R Methoden Übergabe von einer Methodenvariable Java Basics - Anfänger-Themen 3
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
C Erste Schritte Übergabe von Klassen Java Basics - Anfänger-Themen 2
C Methoden Objekte und Methode und Übergabe Java Basics - Anfänger-Themen 4
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
T Problem bei Übergabe von Variablen Java Basics - Anfänger-Themen 1
fLooojava Probleme bei der Übergabe einer Variable Java Basics - Anfänger-Themen 14
R Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends" Java Basics - Anfänger-Themen 5
S OOP Übergabe eines Objektes? Java Basics - Anfänger-Themen 1
fLooojava OOP Übergabe/Output in Textfield Java Basics - Anfänger-Themen 4
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
J ArrayList toString() Übergabe Fehler Java Basics - Anfänger-Themen 2
S Übergabe Java Basics - Anfänger-Themen 14
S Klassen Array: Übergabe von Klasse zur Main Java Basics - Anfänger-Themen 8
A NullPointerException bei Übergabe eines Array Java Basics - Anfänger-Themen 8
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
D Klassen Problem - Übergabe an Konstruktor von Superklasse Java Basics - Anfänger-Themen 2
D Objekt Übergabe Java Basics - Anfänger-Themen 12
M Array Übergabe Java Basics - Anfänger-Themen 17
W Übergabe Stringzeilen von serieller Schnittstelle in andere Klasse Java Basics - Anfänger-Themen 3
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
A Übergabe von Variablen zu Paintmethode Java Basics - Anfänger-Themen 2
N Array Übergabe Java Basics - Anfänger-Themen 9
L Klassen Parameter Übergabe Java Basics - Anfänger-Themen 12
A OOP Übergabe eines Wertes an den enum Konstruktor Java Basics - Anfänger-Themen 12
O Übergabe von Variablen Java Basics - Anfänger-Themen 9
Darth Simple Übergabe eines Strings an eine Methode Java Basics - Anfänger-Themen 3
A Frage zur Übergabe von Strings Java Basics - Anfänger-Themen 9
N Übergabe problem Java Basics - Anfänger-Themen 6
M Übergabe von VM Argumenten Java Basics - Anfänger-Themen 4
J Übergabe einer ArrayList an mehrere Threads Java Basics - Anfänger-Themen 3
J Übergabe eines Arrays als Parameter Java Basics - Anfänger-Themen 2
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
L JTabbedPane, richtige Übergabe von Tabs Java Basics - Anfänger-Themen 18
Z BigInteger Methoden und deren Übergabe Java Basics - Anfänger-Themen 3
K Übergabe einer im EventListener definierte variablen Java Basics - Anfänger-Themen 2
M Übergabe von Variablen in eine Klasse Java Basics - Anfänger-Themen 13
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
G Übergabe von Parametern an JSP Java Basics - Anfänger-Themen 3
S Veränderung von Protected Daten durch Übergabe? Java Basics - Anfänger-Themen 3
K Übergabe der Variable für Farbe Java Basics - Anfänger-Themen 6
G List<.> nach Übergabe vergleichen? Java Basics - Anfänger-Themen 3
G Übergabe Variablen von Servlet zu JSP? Java Basics - Anfänger-Themen 4
R Beiß mir die Zähne aus an der Request-Parameter-Übergabe! Java Basics - Anfänger-Themen 10
lin Übergabe an JPanel-Klasse Java Basics - Anfänger-Themen 3
S NullPointerException bei Array-Übergabe Java Basics - Anfänger-Themen 3
D Übergabe von Variablen Java Basics - Anfänger-Themen 11
W Variabeln Übergabe Java Basics - Anfänger-Themen 14
F Großes Problem: Vector-Übergabe Java Basics - Anfänger-Themen 7
F Übergabe Vaterframe mit this und Fehlermeldung. Java Basics - Anfänger-Themen 2
G Übergabe von Variablenwerten zwischen Methoden Java Basics - Anfänger-Themen 4
H Übergabe eines Wertes an eine Bean --> Bean leer Java Basics - Anfänger-Themen 6
T Array-Übergabe Java Basics - Anfänger-Themen 7
M Windows Pfad-Übergabe.. Java Basics - Anfänger-Themen 6
S String mit Konstruktor (per Übergabe) initialisieren Java Basics - Anfänger-Themen 10
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
T PDF-Formula (XFDF) via Mail - Betreff mit Werten aus PDF-Formular ergänzen Java Basics - Anfänger-Themen 2
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
Henri Vergabe von undeklarieten Werten Java Basics - Anfänger-Themen 64
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
E OOP Array anlegen mit unterschiedlichen Werten Java Basics - Anfänger-Themen 8
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Speichern von Werten in Array Java Basics - Anfänger-Themen 1
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben