# Lagerverwaltung mit mehrdimensionalen Array



## xaja (1. Apr 2009)

Hallo an alle,
ich hab ne Aufgabe zu lösen und zwar muss ich eine Lagerverwaltung erstellen, die folgende Daten für Kisten speichern kann:
- eine eindeutige Nummer zur Identifikation jeder einzelnen Kiste, 
- die Breite, Länge und Höhe jeder Kiste sowie
- das Volumen der Kiste. 

Das Programm soll folgende Funktionen anbieten:
- Eingabe einer neuen Kiste, 
- Löschen der Daten einr vorhandenen Kiste, 
- Ändern der Daten einer vorhandenen Kiste, 
- Anzeigen der Daten einer vorhandenen Kiste und
- eine Listenfunktion, die die Daten aller vorhandenen Kisten anzeigt

Beim Löschen, Ändern  und Anzeigen soll der Zugriff auf die Daten der Kiste über die Nummer der Kiste erfolgen.

So und das ganze soll ich mit nen mehrdimensionalen Array lösen.:bahnhof:
Hier ist mein Code, der aber nicht so recht funktioniert und hoffe, dass ihr mir helfen könnt.

Sorry mal gleich im voraus, ich hab gerade festgestellt, dass das sauviel ist


[HIGHLIGHT="Java"]import javax.swing.*;
public class Lagerverwaltung {

    //Eingabe einer neuen Kiste
    static void eingabe(int[][]argEingabe){
        int nummer; 
        int breite, laenge, hoehe;

        //Kistennr. eingeben bis gültig
        do{
            nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer1-100 eingeben"));

            //wenn gültig und noch nicht vorhanden, Daten eingeben
            if(nummer>0 && nummer<=argEingabe.length)
                if(argEingabe[nummer-1][0]==0){

                    //Nummer zuweisen
                    argEingabe[nummer-1][0]=nummer; 
                    //Werte Einlesen und Arrayelementen zuweisen
                    breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                    argEingabe[nummer-1][1]=breite; 

                    laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
                    argEingabe[nummer-1][2]=laenge;

                    hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
                    argEingabe[nummer-1][3]=hoehe;

                    argEingabe[nummer-1][4]=breite*laenge*hoehe;
                    System.out.println("Das Volumen, der Kiste\t"+nummer+"\tbeträgt:\t"+ (breite*laenge*hoehe));
                }else{
                    System.out.println("Kistennummer breits vergeben.");
                    System.out.println("Kistennummer ungültig.");
                }
        }while(nummer<=0 || nummer>argEingabe.length);
    }

    //Löschen der Daten einer vorhandenen Kiste
    static void loeschen(int[][]argLoeschen){
        int nummer; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer:1-100 wählen"));

        //Wenn Kiste gültig und schon vorhanden dann löschen
        for(int i=0; i<argLoeschen.length; i++)
            if(nummer>0 && nummer<=argLoeschen.length && argLoeschen_.equals(nummer)){
                argLoeschen=null; 
                System.out.println("Löschen der Kiste"+argLoeschen);
            }else{
                System.out.println("Die Kiste ist nicht vorhanden, dem entsprechend kann sie nicht gelöscht werden");
            }    
    }

    //Aendern der Daten einer vorhandenen Kiste
    static void aendern(int[][] argAendern){
        int nummer=0;
        int breite, laenge, hoehe; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("1Bitte eine Kistennummer wählen(Aendern)"));
        for(int i=0; i<argAendern.length; i++)
            if(nummer>0 && nummer<=argAendern.length && argAendern.equals(nummer)){
                breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite1"));
                argAendern[nummer-1][1]=breite; 

                laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge1"));
                argAendern[nummer-1][2]=laenge;

                hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe1"));
                argAendern[nummer-1][3]=hoehe;

                argAendern[nummer-1][4]=breite*laenge*hoehe;

                System.out.println("Geänderte Daten der Kiste");
            }else{
                System.out.println("Kistennummer ungültig.1");
            }
    }

    //Anzeigen der Daten einer vorhandenen Kiste
    static void anzeigen(int[][] argAnzeigen){
        int nummer; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer auswählen(Anzeigen"));
        for(int i=0; i<argAnzeigen.length; i++)
            if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen.equals(nummer)){
                System.out.println("Die Daten der von ihnen gewünschten Kiste lautet:\t"+argAnzeigen);
            }else{
                System.out.println("2Die Kistennummer ist ungültig");
            }
    }

    //Eine Listenfunktionm, die die Daten aller vorhandenen Kisten anzeigt
    static void listenfunktion(int[][]argListenfunktion){
        for(int iA=0; iA<2; iA++)
            for(int iI=0; iI<4; iI++)
                System.out.println("Der Wert des Elements\t"+iA+"\t"+iI+"\tist\t"+argListenfunktion[iA][iI]);
    }

    public static void main(String[]args){

        //Die Vereinbarung des Arrays
        int[][] zahlenArray = new int[2][100];

        //Das Einlesen in einer Methode
        eingabe(zahlenArray);
        anzeigen(zahlenArray);
        loeschen(zahlenArray);
        aendern(zahlenArray);
        listenfunktion(zahlenArray);

        System.exit(0);
    }
}[/HIGHLIGHT]_


----------



## diggaa1984 (1. Apr 2009)

> Hier ist mein Code, der aber nicht so recht funktioniert und hoffe, dass ihr mir helfen könnt.



kannst das mal bidde präzisieren ???:L
 ich neige selten dazu gleich den code zu kopiern und zu compilieren und dergleichen


----------



## ARadauer (2. Apr 2009)

ich haße eure lehrer... die ganze sache ist prozeduraler mist....

int[][] zahlenArray = new int[2][100]; ? wieso, was soll das abbilden?

 if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen_.equals(nummer)){
kann nicht stimmen... argAnzeigen ist ein array und du vergleichst es mit nummer...

eher sowas argAnzeigen[0]


ich denke, das ganze ist so ein beispiel, das zeigen soll wie umständlich das mit arrays ist und in der nächsten vorlesung wird dann über objekte gesprochen... ich halte davon nichts, schülern erst müll zu lernen und dann zu zeigen wie es besser geht... das kann man mal in einer vorlesung machen, aber nicht die schüler mit so einem beispiel eine woche alleine lassen...._


----------



## ARadauer (2. Apr 2009)

zb...

```
static void anzeigen(int[][] argAnzeigen){
        int nummer; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer auswählen(Anzeigen"));
        for(int i=0; i<argAnzeigen.length; i++)
            if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[i][0] == nummer){
                System.out.println("Die Daten der von ihnen gewünschten Kiste lautet:\t"+Arrays.toString(argAnzeigen[i]));
            }else{
                System.out.println("2Die Kistennummer ist ungültig");
            }
    }
```


----------



## xaja (2. Apr 2009)

Hallo ARadauer, 
danke erst mal für deine Hilfe
mit

int[][] zahlenArray = new int[2][100]

wollt ich eigentlich drei Spalten erzeugen, die mir dann meine breite, länge und höhe anzeigt
und mit der 100 wollt ich die hundert Kisten anzeigen

und wie kann ich denn mit der Methode anzeigen erreichen, das eben diese Daten (länge, höhe, breite und volumen) von einer Kiste angezeigt werden. Irgendwie bekomm ich immer nur solche eine Ausgabe

Die Daten der von ihnen gewünschten Kiste lautet:	1
2Die Kistennummer ist ungültig
2Die Kistennummer ist ungültig


----------



## ARadauer (2. Apr 2009)

> int[][] zahlenArray = new int[2][100]
> 
> wollt ich eigentlich drei Spalten erzeugen, die mir dann meine breite, länge und höhe anzeigt
> und mit der 100 wollt ich die hundert Kisten anzeigen


mhn nein... das sind einfach 2 mal 100 werte..


hunder mal 3 werte
wären int[100][3]

int v = arr[a]*;

a ist die kiste, b ist der wert.. 0 länge 1 breite 2 höhe...*


----------



## ARadauer (2. Apr 2009)

asso du willst die nummer auch noch drinne haben, dann brauchst du 4 werte

wären int[100][4]


----------



## ARadauer (2. Apr 2009)

```
import java.util.Arrays;

import javax.swing.*;
public class Lagerverwaltung {
    
    //Eingabe einer neuen Kiste
    static void eingabe(int[][]argEingabe){
        int nummer; 
        int breite, laenge, hoehe;
        
        //Kistennr. eingeben bis gültig
        do{
            nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer1-100 eingeben"));
            
            //wenn gültig und noch nicht vorhanden, Daten eingeben
            if(nummer>0 && nummer<=argEingabe.length)
                if(argEingabe[nummer-1][0]==0){
                    
                    //Nummer zuweisen
                    argEingabe[nummer-1][0]=nummer; 
//                    Werte Einlesen und Arrayelementen zuweisen
                    breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                    argEingabe[nummer-1][1]=breite; 
                    
                    laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
                    argEingabe[nummer-1][2]=laenge;
                    
                    hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
                    argEingabe[nummer-1][3]=hoehe;                    
                   
                    System.out.println("Das Volumen, der Kiste\t"+nummer+"\tbeträgt:\t"+ (breite*laenge*hoehe));
                }else{
                    System.out.println("Kistennummer breits vergeben.");
                    System.out.println("Kistennummer ungültig.");
                }
        }while(nummer<=0 || nummer>argEingabe.length);
    }
    

    
  
    
    //Anzeigen der Daten einer vorhandenen Kiste
    static void anzeigen(int[][] argAnzeigen){
        int nummer; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer auswählen(Anzeigen"));
        for(int i=0; i<argAnzeigen.length; i++){
            if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[i][0] == nummer){
                System.out.println("Die Daten der von ihnen gewünschten Kiste lautet:\t"+Arrays.toString(argAnzeigen[i]));
                return;
            }
        }
        System.out.println("2Die Kistennummer ist ungültig");
           
    }
    
 
    public static void main(String[]args){
        
        //Die Vereinbarung des Arrays
        int[][] zahlenArray = new int[100][4];
        
        //Das Einlesen in einer Methode
        eingabe(zahlenArray);
        anzeigen(zahlenArray);

        
        System.exit(0);
    }
}
```

so klappts

argAnzeigen_[0] == nummer das ist der springende punkt
kiste i, wert 0 ist die nummer..._


----------



## xaja (2. Apr 2009)

aha, ok danke jetzt hab ichs mit argAnzeigen_[0]==nummer verstanden
so jetzt hab ich die methode loeschen auch abgeändert. nur ich bekomme da
jetzt ne "NullPointerException", das liegt aber wahrscheinlich daran, dass ich nur eine Kiste drin hab und diese auch heraus lösche sehe ich das richtig??
Wie könnte ich jetzt, mir mehrere Kisten auf der console anzeigen lassen??
Denn jetzt kommt nur eine Kiste:

Das Volumen, der Kiste	1	beträgt:	35190
Die Daten der von ihnen gewünschten Kiste lautet:	[1, 23, 34, 45]

import java.util.Arrays;

import javax.swing.*;
public class Lager{

    //Eingabe einer neuen Kiste
    static void eingabe(int[][]argEingabe){
        int nummer; 
        int breite, laenge, hoehe;

        //Kistennr. eingeben bis gültig
        do{
            nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer1-100 eingeben"));

            //wenn gültig und noch nicht vorhanden, Daten eingeben
            if(nummer>0 && nummer<=argEingabe.length)
                if(argEingabe[nummer-1][0]==0){

                    //Nummer zuweisen
                    argEingabe[nummer-1][0]=nummer; 
//                    Werte Einlesen und Arrayelementen zuweisen
                    breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
                    argEingabe[nummer-1][1]=breite; 

                    laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
                    argEingabe[nummer-1][2]=laenge;

                    hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
                    argEingabe[nummer-1][3]=hoehe;                    

                    System.out.println("Das Volumen, der Kiste\t"+nummer+"\tbeträgt:\t"+ (breite*laenge*hoehe));
                }else{
                    System.out.println("Kistennummer breits vergeben.");
                    System.out.println("Kistennummer ungültig.");
                }
        }while(nummer<=0 || nummer>argEingabe.length);
    }





    //Anzeigen der Daten einer vorhandenen Kiste
    static void anzeigen(int[][] argAnzeigen){
        int nummer; 
        nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer auswählen(Anzeigen"));
        for(int i=0; i<argAnzeigen.length; i++){
            if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[0] == nummer){
                System.out.println("Die Daten der von ihnen gewünschten Kiste lautet:\t"+Arrays.toString(argAnzeigen));
                return;
            }
        }
        System.out.println("2Die Kistennummer ist ungültig");

    }

    //Löschen der Daten einer vorhandenen Kiste
	static void loeschen(int[][]argLoeschen){
		int nummer; 
		nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer:1-100 wählen"));

		//Wenn Kiste gültig und schon vorhanden dann löschen
		for(int i=0; i<argLoeschen.length; i++)
			if(nummer>0 && nummer<=argLoeschen.length && argLoeschen[0]==nummer){
				argLoeschen=null; 
				System.out.println("Löschen der Kiste"+Arrays.toString(argLoeschen));
			}else{
				System.out.println("Die Kiste ist nicht vorhanden, dem entsprechend kann sie nicht gelöscht werden");
			}	
	}


    public static void main(String[]args){

        //Die Vereinbarung des Arrays
        int[][] zahlenArray = new int[100][4];

        //Das Einlesen in einer Methode
        eingabe(zahlenArray);
        anzeigen(zahlenArray);
        loeschen(zahlenArray);

        System.exit(0);
    }
}_


----------



## ARadauer (2. Apr 2009)

argLoeschen=null; 
System.out.println("Löschen der Kiste"+Arrays.toString(argLoeschen_));

falsch_


----------



## xaja (2. Apr 2009)

Also ich habs jetzt so versucht...es kommt zumindest keine exception mehr

//Löschen der Daten einer vorhandenen Kiste
	static void loeschen(int[][]argLoeschen){
		int nummer; 
		nummer=Integer.parseInt(JOptionPane.showInputDialog("Bitte eine Kistennummer 1-100 wählen die gelöscht werden soll"));

		//Wenn Kiste gültig und schon vorhanden dann löschen
		for(int i=0; i<argLoeschen.length; i++){
			if(nummer>0 && nummer<=argLoeschen.length && argLoeschen_[0]==nummer){
				System.out.println("Löschen der Kiste\t"+argLoeschen[0]);
				return;
			}
		}

		System.out.println("Die Kiste ist nicht vorhanden, dem entsprechend kann sie nicht gelöscht werden");	
	}_


----------



## Parg (15. Dez 2010)

Hallo,

ich möchte mal mit diesem Thema hier weitermachen.
Ich habe ein Fernstudium zum JAVA Programmierer angefangen und habe die gleiche Aufgabenstellung wie der Themenstarter. Der Thread hat mir schon gut weitergeholfen. Ich konnte schon die jeweiligen Methoden und die main class machen.

Aber ich habe noch ein riesen Problem:
Ich kriege es nicht hin, dass ich nach Ausführung einer Methode wieder an den Anfang des Programms komme. Dadurch kann ich natürlich nicht auf eingegebene Kisten anderweitig zugreifen (änder, löschen, anzeien,...). 
Ich hoffe ihr könnt mir dabei etwas helfen. Hier mein Quelltext:


```
import java.util.Arrays;

import javax.swing.*;

public class Lagerverwaltung {

	//EINGABE EINE NEUEN KISTE
	
	  static void eingabe(int[][]argEingabe){

	        int nummer; 
	        int breite, laenge, hoehe;
	        
	        //Kistennummer eingeben
	        do {
	            nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte eine Kistennummer ein (1 -100)"));
	            
	            //Wenn Kistennummer gültig und noch nicht vergeben
	            if(nummer>0 && nummer<=argEingabe.length)
	                if(argEingabe[nummer-1][0]==0){
	                    
	                    //Nummer der Kiste zuweisen
	                    argEingabe[nummer-1][0]=nummer; 
	                    
	                    //Werte Einlesen
	                    breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
	                    argEingabe[nummer-1][1]=breite; 
	                    
	                    laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
	                    argEingabe[nummer-1][2]=laenge;
	                    
	                    hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
	                    argEingabe[nummer-1][3]=hoehe;                    
	                   
	                   }
	                
	                else {
	                    System.out.println("\nDie Kistennummer ist ungültig oder schon vergeben");
	                }
	        }
	        while(nummer<=0 || nummer>argEingabe.length);
	  
	        
	  }
	
	
	  //LÖSCHEN EINER KISTE
	
	  static void loeschen(int[][] argLoeschen) {
		
		  	int nummer;
		
		//Kistennummer eingeben
		do {
            nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte die zu löschende Kistennummer ein"));
		
            //Kontrolle ob die eingegebene Kistnnummer einer bereits gespeicherten Kiste entspricht
            if(nummer>0 && nummer<=argLoeschen.length)
            	if(argLoeschen[nummer-1][0]==nummer){
            	
            	argLoeschen[0][0]=nummer; 
            	
            	}
            
            	else {
            		System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");
            	}
		}
            while(nummer<=0 || nummer>argLoeschen.length);  
            } 
		   
		
		
	
	
	  //ÄNDERN EINER KISTE
	
	  static void aendern(int[][] argAendern) {
	
			int nummer; 
			int breite, laenge, hoehe;
			
			 //Kistennummer eingeben
	        do {
	            nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie bitte eine Kistennummer ein (1 -100)"));
	            
	            //Wenn Kistennummer gültig und noch nicht vergeben
	            if(nummer>0 && nummer<=argAendern.length)
	                if(argAendern[nummer-1][0]!=0){
        
				        //Werte Einlesen
				        breite=Integer.parseInt(JOptionPane.showInputDialog("Kistenbreite"));
				        argAendern[nummer-1][1]=breite; 
				        
				        laenge=Integer.parseInt(JOptionPane.showInputDialog("Kistenlaenge"));
				        argAendern[nummer-1][2]=laenge;
				        
				        hoehe=Integer.parseInt(JOptionPane.showInputDialog("Kistenhoehe"));
				        argAendern[nummer-1][3]=hoehe; 
				        
	                }
				        
		                else {
		                    System.out.println("\nDie Kistennummer ist ungültig oder noch nicht vergeben");
		                }
		        }
		        while(nummer<=0 || nummer>argAendern.length);
		
	}
	
	//ANZEIGEN EINER KISTE
	
	 static void anzeigen(int[][] argAnzeigen){
	        int nummer; 
	        nummer=Integer.parseInt(JOptionPane.showInputDialog("Geben Sie eine vorhandene Kistennummer ein"));
	        for(int i=0; i<argAnzeigen.length; i++){
	            if(nummer>0 && nummer<=argAnzeigen.length && argAnzeigen[i][0] == nummer){
	                System.out.println("\nDie Daten der Kiste sind t:\t"+Arrays.toString(argAnzeigen[i]));
	                return;
	            }
	        }
	        System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");
	           
	    }
	public static void main(String[] args) {
		
		//Vereinbarung des Arrays
		int[][] kistenArray = new int[100][4];
		
		//Auswahl der Funktion
		
		String funktionEinlesen;
		
		char funktion;
		
		System.out.println("Folgende Funktionen stehen Ihnen zur Auswahl: \n");
		System.out.println("A \t Eingabe einer neuen Kiste");
		System.out.println("B \t Löschen einer Kiste");
		System.out.println("C \t Ändern einer Kiste");
		System.out.println("D \t Daten einer Kiste anzeigen");
		System.out.println("E \t Daten aller Kisten anzeigen");
		
		funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
		funktion = funktionEinlesen.charAt(0);
		
		//Auswahl auswerten
		
		switch(funktion) {
		
		case 'a': 
		case 'A':
			System.out.println("\nSie haben Eingabe einer neuen Kiste gewählt");
			eingabe(kistenArray);
			break;
			
		case 'b':
		case 'B':
			System.out.println("\nSie haben Löschen einer Kiste gewählt");
			loeschen(kistenArray);
			break;
		
		case 'c':
		case 'C':
			System.out.println("\nSie haben Ändern einer Kiste gewählt");
			aendern(kistenArray);
			break;
		
		case 'd':
		case 'D':
			System.out.println("\nSie haben Daten einer Kiste anzeigen gewählt");
			anzeigen(kistenArray);
			break;

	
		}
		
		
		System.exit(0);
	}

}
```


----------



## SlaterB (15. Dez 2010)

in die main-Methode muss eine Schleife, ähnlich der in aendern(), wo ja mehrere Nummern eingegeben, die Aktion wiederholt werden kann


----------



## Parg (16. Dez 2010)

Danke, ich werds mal versuchen


----------

