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

K

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

Bekanntes Mitglied
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

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

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
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
A Problem mit set.Text und übergabe Java Basics - Anfänger-Themen 2
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
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
J ArrayList toString() Übergabe Fehler Java Basics - Anfänger-Themen 2
J Problem bei Param.übergabe und dem erstellen von JButtons Java Basics - Anfänger-Themen 4
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
M problem mit string übergabe an klasse Java Basics - Anfänger-Themen 10
A übergabe wert in andere klasse Java Basics - Anfänger-Themen 8
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
A konstruktor übergabe fehler Java Basics - Anfänger-Themen 8
J Übergabe eines Arrays als Parameter Java Basics - Anfänger-Themen 2
G JFileChooser übergabe an Directory Java Basics - Anfänger-Themen 4
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
M [SOLVED]parameter übergabe an objekte Java Basics - Anfänger-Themen 2
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
Z übergabe von string[] an konstruktoren oder methoden 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
W übergabe des aktuellen wertes in andere Klasse Java Basics - Anfänger-Themen 3
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
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
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
L Array mit Werten belegen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben