# Lagerverwaltung



## bortir (25. Apr 2014)

Hallo zusammen!

Ich muss, wie viele andere wahrscheinlich auch schon mussten, eine Laerverwaltung für die Schule programmieren. Das Modul 226 ist unser erstes Java Modul. 



Aufgabe:

1.	Erstellen Sie eine Lagerverwaltung, die folgende Daten für die Kisten speichern kann:
-	Eine eindeutige Nummer zur Identifikation jeder einzelnen Kiste,
-	Die Breite, Länge und Höhe der Kiste sowie
-	Das Volumen der Kiste.

Die Nummer zur Identifikation der Kiste können Sie nach einem beliebigen Schema selbst vergeben. Stellen Sie aber durch geeignete Verfahren sicher, dass bei der Eingabe einer neuen Kiste nicht eine bereits vergebene Nummer benutzt wird.

Das Volumen der Kiste soll automatisch vom Programm anhand der Breite, Länge und Höhe berechnet werden können.

Das Programm soll maximal 50 Kisten verwalten können und folgende Funktionen anbieten:
-	Eingabe einer neuen Kiste,
-	Löschen der Daten einer vorhandenen Kiste,
-	Ändern der Daten einer vorhandenen Kiste,
-	Anzeigen der Daten einer vorhanden 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.

Für die Umsetzung gelten folgende Vorgaben:
-	Speichern Sie die Daten in einer Struktur und legen Sie ein Array in der erforderlichen Grösse für   die Struktur an. Erstellen Sie dieses Array lokal in der Methode Main(). Verwenden Sie keine Klassenvariable.
-	Stellen Sie sicher, dass beim Zugriff auf die Daten der Kisten die Arraygrenzen nicht verlassen werden.
-	Erstellen Sie für das Eingeben, Löschen, Ändern, Anzeigen und Auflisten eigene Methoden.



So, ich glaube, dies habe ich mit diesem Code nicht schlecht erreichen können. Der Code habe ich hier in einem Beitrag schon mal gefunden. Ich denke, der stimmt auch gut mit meiner Aufgabenstellung überein.

Code:


```
package ch.modul226.Lagerverwaltung;

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 -50)"));
                
                //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 -50)"));
                
                //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[50][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);
    }
 
}
```


Jetzt habe ich zu dieser Aufgabe zwei fragen. 
1. Entspricht dieser Code wirklich meiner Aufgabenstellung? Laut meinem Wissen kann ich alles machen was in der Aufgabe verlangt wurde. Oder nicht???

2. Ich arbeite mit Eclipse. Wenn ich jetzt im Eclipse eine neue Kiste erfasse, kann ich nach dem erfassen nicht mehr die anderen Funktionen ausführen. Das heisst, ich kann schlussendlich gar nicht eine Liste mit allen Kisten anzeigen lassen. Kann ich dieses Problem beheben, wenn ich ein anderes Programm brauche? Oder ist es gar nicht möglich.

Wenns es möglich ist, dass ich nach dem erfassen einer Kiste eine Liste aller Kisten anzeigen kann, wie kann ich dies machen??


Besten Dank für Eure Hilfe.


----------



## njans (25. Apr 2014)

Also fundamental würde ich sagen, dass 


> 1. Erstellen Sie eine Lagerverwaltung, die folgende Daten für die Kisten speichern kann:
> - Eine eindeutige Nummer zur Identifikation jeder einzelnen Kiste,
> - Die Breite, Länge und Höhe der Kiste sowie
> - Das Volumen der Kiste.


darauf schließen lässt, dass du hier nicht irgendwelchen Arrays arbeiten sollst, sondern mit einem Objekt "Kiste".


----------



## bortir (25. Apr 2014)

Danke für die schnelle Antwort!

Also sollte es so aussehen:

Anstatt:


```
public static void main(String[] args) {
        
        //Vereinbarung des Arrays
        int[][] kistenArray = new int[50][4];
```


Sondern:


```
public static void main(String[] args) {
        
        //Objekt Kiste erzeugen
        int Kiste = new Kiste
```

Muss ich also nur diesen Teil anpassen? Wie kann ich dann aber die 50 Kisten erreichen?


----------



## njans (25. Apr 2014)

Da du ja ne maximale Anzahl an Kisten brauchst, müsste es schon ein Kiste[] sein. Alternativ wäre wohl eine List<Kiste> noch besser, fraglich ist nur, ob dies bei euch erlaubt ist.


----------



## Zet (25. Apr 2014)

Die Volumenberechnung fehlt auch, oder seh ichs einfach nicht?

Und ich denke das ganze soll in einer Art Schleife laufen, du möchtest dir doch bestimmt den Spaß deine hart erstellte Kiste auch zu zerstören nicht entgehen lassen oder? 
Soll heißen, es ist glaube ich nicht möglich mit einer erstellen Kiste etwas zu tun, da dein Programm nach erstellung der kiste abbricht.


----------



## bortir (25. Apr 2014)

njans hat gesagt.:


> Da du ja ne maximale Anzahl an Kisten brauchst, müsste es schon ein Kiste[] sein. Alternativ wäre wohl eine List<Kiste> noch besser, fraglich ist nur, ob dies bei euch erlaubt ist.



Eine Liste können wir erstellen. Aber ich habe leider keine Ahnung was eine Liste ist, weil wir dies nicht gelernt haben...
Wie würde den so eine Liste aussehen?


----------



## bortir (25. Apr 2014)

Zet hat gesagt.:


> Die Volumenberechnung fehlt auch, oder seh ichs einfach nicht?
> 
> Und ich denke das ganze soll in einer Art Schleife laufen, du möchtest dir doch bestimmt den Spaß deine hart erstellte Kiste auch zu zerstören nicht entgehen lassen oder?
> Soll heißen, es ist glaube ich nicht möglich mit einer erstellen Kiste etwas zu tun, da dein Programm nach erstellung der kiste abbricht.




In Eclipse kann ich den Code einmal durchlaufen lassen, nach dem ich eine Kiste erstellt habe, kann ich leider die "Alle Kisten" Funktion nicht aufrufen, weil ich das Programm neu starten muss. Dadurch gehen mit die erstellen Kisten verloren.


----------



## njans (25. Apr 2014)

```
ArrayList<Kiste> kistenListe = new ArrayList<Kiste>();
```

Naja Listen gehören zu den grundlegendsten Datenstrukturen. Daher empfehle ich dir, das einmal nachzulesen:
Galileo Computing :: Java ist auch eine Insel – 13.3 Listen

Anmerkung: Listen wachsen dynamisch mit, im Gegensatz zu Arrays, die immer eine feste Größe haben.


----------



## bortir (25. Apr 2014)

njans hat gesagt.:


> ```
> ArrayList<Kiste> kistenListe = new ArrayList<Kiste>();
> ```
> 
> ...




Besten Dank. Ich werde am Nachmittag mich damit beschäftigen.
Hast du auch eine Idee, wie ich es verhindern könnte, das bei der Eingabe einer Kiste das Programm weiter macht und nicht abbricht?


----------



## njans (25. Apr 2014)

Stichwort: *Schleifen*

Einfach alles in eine Schleife packen:


```
do{

 // Programmcode

}while(eingabe != beenden)
```


----------



## strußi (25. Apr 2014)

mach dir doch ein Modell vom Typ Kiste

diese kann
Kiste bauen (konstruktor)
Kiste verändern (getter und setter für alle Kistenattribute (id, länge, breite, tiefe, volumen)
Kiste kaputtmachen ("destruktor" Object(id) =null )
Kiste ausgeben
Kisten ausgeben
Kiste volumen (wird im konstruktor aufgerufen oder dort als volumen =a *b *t implementiert);
KistenListe (Arraylist vom typ Object zugriff über id)

kistencounter immer wenn konstruktor aufgerufen wird zähler erhöhen, destruktor vermindert die anzahl
Kistenanzahl( prüft vor konstruktoraufruf, ob du überhaupt noch kisten bauen darfst oder nicht if(kistencounter <=50){ bauen( parameter); }else{ System.out.print( "max. Kistenanzahl erreicht");}

und von dieser Klasse machst du in einer Testklasse ein Object und probierst es mal aus

Schau mal ob du mittels diesem spicker hinbekommst. bei solchen aufgaben lernt man bissle was wenn man den code selber erstellt.


----------



## bortir (26. Apr 2014)

ich habs jetzt nicht schlecht hingekriegt. Jetzt habe ich aber nur noch das Problem, dass nach einer Eingabe das Programm immer wieder abbricht. Ich habe den ganzen Nachmittag versucht, diese Problem noch zu beheben. Leider kam ich nicht auf die Antwort.

Ich denke, wenn ich den Switch Case Bereich in eine do while Schleife einfüge, sollte es eigentlich klappen. Kann mir jemand weiterhelfen?


----------



## strußi (26. Apr 2014)

was immer hilft, ist wenn du den errorlog postest.


----------



## njans (26. Apr 2014)

Nun ohne Code und Fehlermeldung kann man da wenig sagen.


----------



## strußi (27. Apr 2014)

hab mal kurz ein kisteModell gebaut, die alles können sollte was deine Lagerverwaltung können sollte. Wenn du Probleme haben solltest, frag einfach nach. Die ID wird automatisch über die KistenAnzahl generiert.



Spoiler: Code





```
import java.util.ArrayList;

/**
 *
 * @author Christian
 */
public class Kiste {

    public static ArrayList<Kiste> kisten =new ArrayList<>();
    private static  int kistenAnzahl =1;
    
    private int id;
    private double breite;
    private double hoehe;
    private double tiefe;
    private double volumen;
    
    public Kiste( double hoehe, double breite, double tiefe){
        if( kisten.size() < 50){
            this.id =kistenAnzahl;
            this.hoehe =hoehe;
            this.breite =breite;
            this.tiefe =tiefe;
            setVolumen(hoehe, breite, tiefe);
            kisten.add( this);
            System.out.println( "Kiste mit der ID " +this.id +" gebaut.");
            kistenAnzahl++;
        } else{
            System.out.println( "Das Lager ist voll");
        }
    }
    
    public void kisteZerstoeren( int id){
        boolean kisteZerstoert =false;
        for( int i =0; i <kisten.size(); i++){
            if( id ==kisten.get(i).getID()){
                kisten.set( i, null);
                kisteZerstoert =true;
                break;
            }
        }
        if( kisteZerstoert ==true){
            System.out.println( "Kiste mit der ID " +id +" wurde vernichtet.");
        } else{
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        }
    }
    
    public static void getKiste( int id){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <kisten.size(); i++){
            if( id ==kisten.get(i).getID()){
                kiste =kisten.get( i);
                System.out.println( "Kiste Nr " +id);
                System.out.println( "     ID =" +kiste.getID());
                System.out.println( " Breite =" +kiste.getBreite());
                System.out.println( "   Höhe =" +kiste.getHoehe());
                System.out.println( "  Tiefe =" +kiste.getTiefe());
                System.out.println( "Volumen =" +kiste.getVolumen());
                kistegefunden =true;
            }
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde gefunden");
        }
    }
    
    public int getID(){
        return this.id;
    }
    
    public double getBreite(){
        return this.breite;
    }
    private void setBreite( double breite){
        this.breite =breite;
    }
    
    public double getHoehe(){
        return this.hoehe;
    }
    private void setHoehe( double hoehe){
        this.hoehe =hoehe;
    }
    
    
    public double getTiefe(){
        return this.tiefe;
    }
    private void setTiefe( double tiefe){
        this.tiefe =tiefe;
    }
    
    
    public double getVolumen(){
        return this.volumen;
    }
    private void setVolumen( double hoehe, double breite, double tiefe){
        this.volumen =hoehe *breite *tiefe;
    }
    
    public void changeKiste( int id, double hoehe, double breite, double tiefe){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <kisten.size(); i++){
            if( id ==kisten.get(i).getID()){
                kiste =kisten.get( i);
                kiste.setHoehe( hoehe);
                kiste.setBreite( breite);
                kiste.setTiefe( tiefe);
                kiste.setVolumen( hoehe, breite, tiefe);
                kisten.set( i, kiste);
                kistegefunden =true;
            }
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde geändert");
        }
    }
    
    public static void printAlleKisten(){
        for( int i =0; i <kisten.size(); i++){
            getKiste( kisten.get( i).getID());
            System.out.println( "");
        }
    }
}
```






Spoiler: test





```
/**
 *
 * @author Christian
 */
public class TestKiste {
    
    public static void main( String[] args){
        for( int i =0; i < 70; i++){
            Kiste kisten =new Kiste( Math.random()*100 +3, Math.random()*100 +3, Math.random()*100 +3);
        }
        
//        System.out.println( Kiste.kisten.get(0).getID());
//        System.out.println( Kiste.kisten.get(1).getID());
        Kiste.printAlleKisten();
    }
}
```


----------



## strußi (27. Apr 2014)

mir ist noch ein "kleiner" Flüchtigkeitsfehler unterlaufen (NPE), deshalb verbesserter Code und neue Testklasse



Spoiler: Kistenmodell





```
import java.util.ArrayList;

/**
 *
 * @author Christian
 */
public class Kiste {

    public static ArrayList<Kiste> kisten =new ArrayList<>();
    
    public static int maxKisten =5000;
    private static int kistenAnzahl =1;
    
    private int id;
    private double breite;
    private double hoehe;
    private double tiefe;
    private double volumen;
    
    public Kiste( double hoehe, double breite, double tiefe){
        if( kisten.size() <maxKisten){
            this.id =kistenAnzahl;
            this.hoehe =hoehe;
            this.breite =breite;
            this.tiefe =tiefe;
            setVolumen(hoehe, breite, tiefe);
            kisten.add( this);
            System.out.println( "Kiste mit der ID " +this.id +" gebaut.");
            kistenAnzahl++;
        } else{
            System.out.println( "Das Lager ist voll");
        }
    }
    
    public void kisteZerstoeren( int id){
        for( int i =0; i <kisten.size(); i++){
            if( kisten.get( i) !=null){
                if( id ==kisten.get( i).getID()){
                    kisten.remove( i);
                    System.out.println( "Kiste mit der ID " +id +" wurde vernichtet.");
                } else{}
            } else{}
        }
//        System.out.println( "Kistenliste ist " +kisten.size() +" lang."); 
    }
    
    public Kiste getKiste( int id){
        Kiste kiste =null;
        boolean kistegefunden =false;
        for( int i =0; i <kisten.size(); i++){
            if( kisten.get( i) !=null){
                if( id ==kisten.get(i).getID()){
                    kiste =kisten.get( i);
                    System.out.println( "Kiste Nr " +( i +1));
                    System.out.println( "     ID =" +kiste.getID());
                    System.out.println( " Breite =" +kiste.getBreite());
                    System.out.println( "   Höhe =" +kiste.getHoehe());
                    System.out.println( "  Tiefe =" +kiste.getTiefe());
                    System.out.println( "Volumen =" +kiste.getVolumen());
                    kistegefunden =true;
                }
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde gefunden");
        }
        return kiste;
    }
    
    public int getID(){
        return this.id;
    }
    
    public double getBreite(){
        return this.breite;
    }
    private void setBreite( double breite){
        this.breite =breite;
    }
    
    public double getHoehe(){
        return this.hoehe;
    }
    private void setHoehe( double hoehe){
        this.hoehe =hoehe;
    }
    
    
    public double getTiefe(){
        return this.tiefe;
    }
    private void setTiefe( double tiefe){
        this.tiefe =tiefe;
    }
    
    
    public double getVolumen(){
        return this.volumen;
    }
    private void setVolumen( double hoehe, double breite, double tiefe){
        this.volumen =hoehe *breite *tiefe;
    }
    
    public void changeKiste( int id, double hoehe, double breite, double tiefe){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <kisten.size(); i++){
            if( id ==kisten.get(i).getID()){
                kiste =kisten.get( i);
                kiste.setHoehe( hoehe);
                kiste.setBreite( breite);
                kiste.setTiefe( tiefe);
                kiste.setVolumen( hoehe, breite, tiefe);
                kisten.set( i, kiste);
                kistegefunden =true;
            }
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde geändert");
        }
    }
    
    public void printAlleKisten(){
        for( int i =0; i <kisten.size(); i++){
            if( kisten.get( i) !=null){
                getKiste( kisten.get( i).getID());
                System.out.println( "");
            } else{
                System.out.println( "Keine Kiste an der Position " + ( i +1) +" gefunden.");
            }
        }
    }
    
    public void printKistenListe(){
        for( int i =0; i <kisten.size(); i++){
            if( kisten.get( i) !=null){
                kisten.get( i).getID();
            } else{}
        }
    }
}
```






Spoiler: KistenTest





```
/**
 *
 * @author Christian
 */
public class TestKiste {
    
    public static void main( String[] args){
        Kiste kiste =null;
        int max =20000;
        for( int i =0; i < Kiste.maxKisten; i++){
            kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3);
                    
        }
        for( int i =0; i <Kiste.kisten.size(); i++){
            if( Kiste.kisten.isEmpty() ==true){
            } else{
                kiste =Kiste.kisten.get( i);
                double volume =kiste.getVolumen();
                int kistenNr =kiste.getID();
                if( volume >(( 1d /2d)*Math.pow( max, 3))){
                    kiste.kisteZerstoeren( kistenNr);
                    kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3);
                }
            }
        }
        
        kiste.printAlleKisten();
        
        kiste.printKistenListe();
        
        kiste.getKiste( 5);
        if( kiste != null){
            double id =kiste.getID();
            double hoehe =kiste.getHoehe();
            double breite =kiste.getBreite();
            double tiefe =kiste.getTiefe();
            double volumen =kiste.getVolumen();
        }
    }
}
```




grüße


----------



## bortir (27. Apr 2014)

strußi hat gesagt.:


> was immer hilft, ist wenn du den errorlog postest.



Ich habe keinen Error-Log. Ich möchte nur, dass das Programm nach einer Funktionsauswahl wieder fragt, welche Funktion man gerne ausführen möchte. Dann soll das Programm wieder zuoberst bei der Switch Case Auswahl beginnen.



Spoiler



package ch.modul226.Lagerverwaltung;

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 -50)"));

                //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 -50)"));

                //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_[0] == nummer){
                    System.out.println("\nDie Daten der Kiste sind t:\t"+Arrays.toString(argAnzeigen));
                    return;
                }
            }
            System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");

        }
    public static void main(String[] args) {

        //Vereinbarung des Arrays
        int[][] kistenArray = new int[50][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");
        System.out.println("X \t Programm beenden");

        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);

            funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
            funktion = funktionEinlesen.charAt(0);

        case 'b':
        case 'B':
            System.out.println("\nSie haben Löschen einer Kiste gewählt");
            loeschen(kistenArray);

            funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
            funktion = funktionEinlesen.charAt(0);

        case 'c':
        case 'C':
            System.out.println("\nSie haben Ändern einer Kiste gewählt");
            aendern(kistenArray);

            funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
            funktion = funktionEinlesen.charAt(0);

        case 'd':
        case 'D':
            System.out.println("\nSie haben Daten einer Kiste anzeigen gewählt");
            anzeigen(kistenArray);

            funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
            funktion = funktionEinlesen.charAt(0);

        case 'x':
        case 'X':
            System.out.println("\nSie haben das Programm beendet.");


        }     

        System.exit(0);
    }

}_


----------



## strußi (27. Apr 2014)

dann mach eine eingabemaske für die cmd oder eine gui
in der du die verschieden möglichekeiten mit werten hinterlegtst und abfrägst


(1) kiste erstellen
(2) kiste ändern
(3) kiste löschen
(4) kiste ausgeben
(5) kisten ausgeben
...

und dann über Scanner.in(); einlesen und aktion durchführen


----------



## bortir (27. Apr 2014)

Genau, dass habe ich soweit auch gemacht. Ich kann eine  Funktion auswählen und die wird danach auch ausgeführt. Jedoch wenn diese Funktion beendet wurde, möchte ich nochmals alle Funktionen auswählen können. Dafür benötige ich meines Wissens nach eine Schleife. Leider weiss ich nicht was für eine Schleife und wie ich diese dann in dem Switch Case einbauen kann.


----------



## ceguinho (27. Apr 2014)

Dafür könntest du eine While-Schleife nutzen. Die wird solange ausgeführt bis die Abbruch-Bedingung wahr ist.


----------



## strußi (27. Apr 2014)

while( abbruch ==false) 
nach jeder funktionsdurchführung führst du eine methode eingabeAufforderung(), die du aufrufst,
}


----------



## bortir (27. Apr 2014)

ceguinho hat gesagt.:


> Dafür könntest du eine While-Schleife nutzen. Die wird solange ausgeführt bis die Abbruch-Bedingung wahr ist.



Wie würde diese While Schleife genau aussehen? Ich habe dies jetzt schon eine Ewigkeit versucht. Mir gelang es leider nicht.


----------



## strußi (27. Apr 2014)

eingabe über switch case bzw. if else prüfen und die jeweils passenden Methoden ausführen


```
boolean abbruch =false;
while( abbruch ==false){
  int/String/... input =einlesen();
  switch( input){
       case 1: 
          break;
       case 2: 
          break;
       case 3: 
          break;
       case 4: 
          break;
       case 5: 
          break;
       case exit:
          abbruch ==true; 
          break;
   }
}
```


----------



## bortir (27. Apr 2014)

So. Ich komme meinem Ziel immer näher.



Spoiler: Code



package ch.modul226.Lagerverwaltung;

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 -50)"));

                //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 -50)"));

                //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_[0] == nummer){
                    System.out.println("\nDie Daten der Kiste sind: \t"+Arrays.toString(argAnzeigen));
                    return;
                }
            }
            System.out.println("\nDie Kistennummer " +nummer + " ist nicht bekannt");

        }

     //ANZEIGEN ALLER KISTEN 

     static void anzeigenAller(int[][] argAnzeigenAller){	 
          System.out.println("\nDie Daten aller Kisten sind: \t"+Arrays.toString(argAnzeigenAller));
             return;            
         }


    public static void main(String[] args) {

        //Vereinbarung des Arrays
        int[][] kistenArray = new int[50][4];

        //Auswahl der Funktion

        String funktionEinlesen;

        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");
        System.out.println("X \t Programm beenden");

        //Auswahl auswerten

        boolean abbruch =false;
        while(abbruch ==false){
            funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
            switch(funktionEinlesen){
          case "A":
              System.out.println("\nSie haben Eingabe einer neuen Kiste gewählt");
              eingabe(kistenArray);
              break;

          case "B":
              System.out.println("\nSie haben Löschen einer Kiste gewählt");
              loeschen(kistenArray);
              break;

          case "C":
              System.out.println("\nSie haben Ändern einer Kiste gewählt");
              aendern(kistenArray);
              break;

          case "D":
              System.out.println("\nSie haben Daten einer Kiste anzeigen gewählt");
              anzeigen(kistenArray);
              break;

          case "E":
              System.out.println("\nSie haben Daten aller Kiste anzeigen gewählt");
              anzeigen(kistenArray);
              break;

          case "X":
               abbruch=true;
               System.out.println("\nSie haben das Programm beendet.");
               break;
           }
        }

    }


    }
_


_

Ich muss jetzt nur noch das Volumen berechnen können und es anzeigen lassen, sowie die Daten aller Kisten ausgeben. Ich werde dies noch versuchen und dann das fertige Programm nochmals hier posten. Wenn ich noch Fragen habe werde ich diese hier noch stellen. 
Wenn ihr für mich noch Tipps habt, wäre ich euch dankbar, wenn ihr diese hier posten könntet.:idea:_


----------



## strußi (27. Apr 2014)

ganz zu oberst
Java™ Quelltext ist bitte in 
	
	
	
	





```
-Tags zu schreiben: [code=Java]hier Java Code einfügen[/SIZE]
```

Das ist wichtig für uns, damit wir den code besser lesen können und die formatierung erhalten bleibt.
Bei einer fehlerausgabe mit gepostetem code *und* fehler müssten wir erst zeilenzählen und das macht hier keiner.


falls du probleme damit haben solltest, kannst du auch in meinem kistencode dir anregung zur ausgabe einer bzw. aller kiste/n(printKiste printKisten), Volumenberechnung und ausgabe ( setVolumen/getVolumen).

ist bei dir kistennr =kistenid?
War die nicht, Aufgabenstellung war über eine kisten*ID* zu gehen?

das kann zwar sein, aber ist genaugenommen nicht richtig, weil so kannst du die kisten nicht eindeutig bestimmen kannst, da in deinem fall es mehrere kisten mit der gleichen kistennummer geben kann ( löschen, erstellen, löschen, ...), und so nicht eindeutig ist welche kiste nr. xx das ist. Es wäre so, wie wenn ein chargennummer sich nach x chargen wieder holen würde.

außerdem würde ich das modell, die oberfläche und den Test trennen, und über schnittstellen (getter/setter) kommunizieren lassen. Das ist übersichtlicher und in größeren Projekten findest du dich später nicht mehr zurecht, wenn du alles in eine klasse zimmerst. Mein Prof. würde diesen Programmierstil momentan als "pathologisch" bezeichnen


----------



## Zet (28. Apr 2014)

Morgääähn,

Strußi ich hätte noch eine Frage zu deinem Code.


Du erstellst ja die Arraylist die die Kisten enthält in der selben Klasse in der die Kisten erstellt wurden.

In der Aufgabenstellung steht jedoch:
Erstellen Sie dieses Array lokal in der methode Main(). Verwenden Sie keine Klassenvariable.

Wie würde das dann aussehen?
Oder wird dort einfach erwartet das die Kisten als Argumente an die Main-methode übergeben wird.
Stehe da gerade etwas auf dem Schlauch ???:L


Grüße
Zet


----------



## strußi (28. Apr 2014)

du kannst das auch rausziehen aus der klasse und dem Konstruktor und sonst überall anders wo er vorkommt, und in die main packen, 
musst dort immer schauen, wie groß die liste ist und und die einzelnen kisten dort hinzufügen

probier mal selber auf die lösung zu kommen. hab grad selber ein haufen zu tun.


----------



## strußi (29. Apr 2014)

Spoiler: code





```
package javaforum.lagerverwaltung;

import java.util.ArrayList;

/**
 *
 * @author Christian
 */
public class Kiste {
    
    
    public static int maxKisten =50;
    private static int kistenAnzahl =1;
    
    private int id;
    private double breite;
    private double hoehe;
    private double tiefe;
    private double volumen;
    
    public Kiste( double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        if( lager.size() <maxKisten){
            this.id =kistenAnzahl;
            this.hoehe =hoehe;
            this.breite =breite;
            this.tiefe =tiefe;
            setVolumen( hoehe, breite, tiefe);
            System.out.println( "Kiste mit der ID " +this.id +" gebaut.");
            kistenAnzahl++;
        } else{
            System.out.println( "Das Lager ist voll");
        }
    }
    
    public void kisteZerstoeren( int id, ArrayList<Kiste> lager){
        boolean zerstoert =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get( i).getID()){
                    lager.remove( i);
                    System.out.println( "Kiste mit der ID " +id +" wurde vernichtet.");
                    zerstoert =true;
                } else{}
            } else{}
        }
        if( zerstoert ==false){
            System.out.println( "Kiste mit der ID " +id +" wurde nicht gefunen.");
        }
    }
    
    public Kiste getKiste( int id, ArrayList<Kiste> lager){
        Kiste kiste =null;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    System.out.println( "Kiste Nr " +( i +1));
                    System.out.println( "     ID =" +kiste.getID());
                    System.out.println( " Breite =" +kiste.getBreite());
                    System.out.println( "   Höhe =" +kiste.getHoehe());
                    System.out.println( "  Tiefe =" +kiste.getTiefe());
                    System.out.println( "Volumen =" +kiste.getVolumen());
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde gefunden");
        }
        return kiste;
    }
    
    public int getID(){
        return this.id;
    }
    
    public double getBreite(){
        return this.breite;
    }
    private void setBreite( double breite){
        this.breite =breite;
    }
    
    public double getHoehe(){
        return this.hoehe;
    }
    private void setHoehe( double hoehe){
        this.hoehe =hoehe;
    }
    
    public double getTiefe(){
        return this.tiefe;
    }
    private void setTiefe( double tiefe){
        this.tiefe =tiefe;
    }
   
    public double getVolumen(){
        return this.volumen;
    }
    private void setVolumen( double hoehe, double breite, double tiefe){
        this.volumen =hoehe *breite *tiefe;
    }
    
    public void changeKiste( int id, double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    kiste.setHoehe( hoehe);
                    kiste.setBreite( breite);
                    kiste.setTiefe( tiefe);
                    kiste.setVolumen( hoehe, breite, tiefe);
                    lager.set( i, kiste);
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde geändert");
        }
    }
    
    public void printAlleKisten( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                getKiste( lager.get( i).getID(), lager);
                System.out.println( "");
            } else{
                System.out.println( "Keine Kiste an der Position " + ( i +1) +" gefunden.");
            }
        }
    }
    
    public void printKistenListe( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                int id =lager.get( i).getID();
                System.out.println( "Kiste Nummer " +(i+1) +"hat die ID " +id);
            } else{}
        }
    }
}
```






Spoiler: lager





```
package javaforum.lagerverwaltung;

import java.util.ArrayList;

/**
 *
 * @author Christian
 */
public class TestKiste {
    
    public static void lagerTest(){
        ArrayList<Kiste> lager =new ArrayList<>();
        Kiste kiste =null;
        int max =20;
        for( int i =0; i < Kiste.maxKisten; i++){
            kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3, lager);
            lager.add( kiste);
        }
        for( int i =0; i <lager.size(); i++){
            if( lager.isEmpty() ==false){
                kiste =lager.get( i);
                double volume =kiste.getVolumen();
                int kistenID =kiste.getID();
                if( volume >(( 1d /2d)*Math.pow( max, 3))){
                    kiste.kisteZerstoeren( kistenID, lager);
                    kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3, lager);
                    lager.add( kiste);
                }
            } else{}
        }
        
        kiste.printAlleKisten( lager);
    }
    
    
    
    public static void main( String[] args){
        lagerTest();
    }
        
}
```




so das wäre die lösung mit dem lager in der außerhalb des modells


----------



## bortir (7. Mai 2014)

Hallo zusammen 

Leider habe ich immer noch probleme mit der Lagerverwaltung. Ich komme einfach nicht weiter.

Den Code habe ich immer och nicht fertig gekriegt. Aktueller Code steht noch oben :/
Kann mir jemand weiterhelfen?


----------



## strußi (7. Mai 2014)

leider nicht, weil er net formatiert ist, schau ich ihn mir nicht an. der code von mir ist/sollte vollständig sein.


----------



## bortir (8. Mai 2014)

strußi hat gesagt.:


> leider nicht, weil er net formatiert ist, schau ich ihn mir nicht an. der code von mir ist/sollte vollständig sein.



Hallo zusammen Leider habe ich immer noch probleme mit der Lagerverwaltung. Ich komme einfach nicht weiter.Den Code habe ich immer och nicht fertig gekriegt. Aktueller Code steht noch oben :/Kann mir jemand weiterhelfen?


hats du eventuell einen Lösungsvorschlag?


----------



## strußi (8. Mai 2014)

bortir hat gesagt.:


> Hallo zusammen
> 
> Leider habe ich immer noch probleme mit der Lagerverwaltung. Ich komme einfach nicht weiter.
> 
> ...



wo genau ist dein problem, außer dass du nicht weiter kommst

poste doch einfach den code in [ S P O I L E R=""] [ J A V A ] [/code][/SPOILER], dann schau ich ihn mir an ;-)


----------



## bortir (8. Mai 2014)

Aktueller Code:


Spoiler





```
package ch.modul226.Lagerverwaltung;

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 -50)"));

//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; 
System.out.println("\nDie Kistennummer " +nummer + " wurde gelöscht.");

}

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 -50)"));

//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[50][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");
System.out.println("X \t Programm beenden");

//Auswahl auswerten

boolean exit = true;

while(exit){
	
	funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
	funktion = funktionEinlesen.charAt(0);
	
	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;
	
	case 'x':
	case 'X':
	exit = false;
	System.out.println("\nSie haben das Programm beendet.");

}
} 

System.exit(0);
}

}
```




Leider habe ich mit diesem Programm noch einige Fehler drin. Also einige Funktionen funktionieren nicht einwandfrei.

Den Code welchen du gepostet hast


Spoiler





```
package javaforum.lagerverwaltung;
 
import java.util.ArrayList;
 
/**
 *
 * @author Christian
 */
public class Kiste {
    
    
    public static int maxKisten =50;
    private static int kistenAnzahl =1;
    
    private int id;
    private double breite;
    private double hoehe;
    private double tiefe;
    private double volumen;
    
    public Kiste( double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        if( lager.size() <maxKisten){
            this.id =kistenAnzahl;
            this.hoehe =hoehe;
            this.breite =breite;
            this.tiefe =tiefe;
            setVolumen( hoehe, breite, tiefe);
            System.out.println( "Kiste mit der ID " +this.id +" gebaut.");
            kistenAnzahl++;
        } else{
            System.out.println( "Das Lager ist voll");
        }
    }
    
    public void kisteZerstoeren( int id, ArrayList<Kiste> lager){
        boolean zerstoert =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get( i).getID()){
                    lager.remove( i);
                    System.out.println( "Kiste mit der ID " +id +" wurde vernichtet.");
                    zerstoert =true;
                } else{}
            } else{}
        }
        if( zerstoert ==false){
            System.out.println( "Kiste mit der ID " +id +" wurde nicht gefunen.");
        }
    }
    
    public Kiste getKiste( int id, ArrayList<Kiste> lager){
        Kiste kiste =null;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    System.out.println( "Kiste Nr " +( i +1));
                    System.out.println( "     ID =" +kiste.getID());
                    System.out.println( " Breite =" +kiste.getBreite());
                    System.out.println( "   Höhe =" +kiste.getHoehe());
                    System.out.println( "  Tiefe =" +kiste.getTiefe());
                    System.out.println( "Volumen =" +kiste.getVolumen());
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde gefunden");
        }
        return kiste;
    }
    
    public int getID(){
        return this.id;
    }
    
    public double getBreite(){
        return this.breite;
    }
    private void setBreite( double breite){
        this.breite =breite;
    }
    
    public double getHoehe(){
        return this.hoehe;
    }
    private void setHoehe( double hoehe){
        this.hoehe =hoehe;
    }
    
    public double getTiefe(){
        return this.tiefe;
    }
    private void setTiefe( double tiefe){
        this.tiefe =tiefe;
    }
   
    public double getVolumen(){
        return this.volumen;
    }
    private void setVolumen( double hoehe, double breite, double tiefe){
        this.volumen =hoehe *breite *tiefe;
    }
    
    public void changeKiste( int id, double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    kiste.setHoehe( hoehe);
                    kiste.setBreite( breite);
                    kiste.setTiefe( tiefe);
                    kiste.setVolumen( hoehe, breite, tiefe);
                    lager.set( i, kiste);
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde geändert");
        }
    }
    
    public void printAlleKisten( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                getKiste( lager.get( i).getID(), lager);
                System.out.println( "");
            } else{
                System.out.println( "Keine Kiste an der Position " + ( i +1) +" gefunden.");
            }
        }
    }
    
    public void printKistenListe( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                int id =lager.get( i).getID();
                System.out.println( "Kiste Nummer " +(i+1) +"hat die ID " +id);
            } else{}
        }
    }
}
```






Spoiler





```
package javaforum.lagerverwaltung;
 
import java.util.ArrayList;
 
/**
 *
 * @author Christian
 */
public class TestKiste {
    
    public static void lagerTest(){
        ArrayList<Kiste> lager =new ArrayList<>();
        Kiste kiste =null;
        int max =20;
        for( int i =0; i < Kiste.maxKisten; i++){
            kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3, lager);
            lager.add( kiste);
        }
        for( int i =0; i <lager.size(); i++){
            if( lager.isEmpty() ==false){
                kiste =lager.get( i);
                double volume =kiste.getVolumen();
                int kistenID =kiste.getID();
                if( volume >(( 1d /2d)*Math.pow( max, 3))){
                    kiste.kisteZerstoeren( kistenID, lager);
                    kiste =new Kiste( Math.random()*max +3, Math.random()*max +3, Math.random()*max +3, lager);
                    lager.add( kiste);
                }
            } else{}
        }
        
        kiste.printAlleKisten( lager);
    }
    
    
    
    public static void main( String[] args){
        lagerTest();
    }
        
}
```




Der wäre laut meinem Wissen fehlerfrei. Nun möchte ich gerne diesen Code mit meinem Code verknüpfen. Also ich möchte, dass ich folgendes Menu zur Verfügung habe:


Spoiler





```
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;

	case 'e':
	case 'E':
	System.out.println("\nSie haben Daten aller Kiste anzeigen gewählt");
	anzeigen(kistenArray);
	break;
	
	case 'x':
	case 'X':
	exit = false;
	System.out.println("\nSie haben das Programm beendet.");

}
```




Dieses Menü sollte ich haben und ebenfalls muss ich selber die Eingaben machen können. Also ich muss entscheiden was ich mit den Kisten anstellen will.

Ich kann jetzt mein Menü nicht passend zu deinem Code schreiben. Wie würde das passende Menü aussehen bei deinem Code.

Danke!


----------



## strußi (8. Mai 2014)

so und um noch besser nach fehlern zu suchen, brauchen wir noch den errorlog ;-)


----------



## bortir (8. Mai 2014)

strußi hat gesagt.:


> so und um noch besser nach fehlern zu suchen, brauchen wir noch den errorlog ;-)



Einen Error Log gibt es nicht. Bei meinem Code funktioniert das Löschen nicht. Aber ich möchte eigentlich dein Code nehmen, meinen Code ergänzen so dass ich die Kisten selbst erstellen kann. etc...


----------



## strußi (8. Mai 2014)

dann nimm doch meinen code und schreib einfach in deinem menü, die methoden rein, die du für die jeweilige aktion brauchst,

du hast doch schon dein menü über das du die aktionen auslöst und da musst du nur noch die aktion aus meinem code anbinden und fertig ist es

unter a rufst du den konstruktor auf, und lässt dir von benutzer die werte für länge breite tiefe eingeben und gibts ihm dafür die kisten id zurück


----------



## bortir (8. Mai 2014)

Error Log 



Spoiler



Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	The method eingabe(int, ArrayList<Kiste>) in the type Kiste is not applicable for the arguments (int[][])
	The method loeschen(int, ArrayList<Kiste>) in the type Kiste is not applicable for the arguments (int[][])
	The method aendern(int, double, double, double, ArrayList<Kiste>) in the type Kiste is not applicable for the arguments (int[][])
	The method anzeigen(ArrayList<Kiste>) in the type Kiste is not applicable for the arguments (int[][])
	The method alleanzeigen(ArrayList<Kiste>) in the type Kiste is not applicable for the arguments (int[][])

	at javaforum.lagerverwaltung.Kiste.main(Kiste.java:191)$



Code


Spoiler





```
package javaforum.lagerverwaltung;
 
import java.util.ArrayList;

import javax.swing.JOptionPane;
 
/**
 *
 * @author Rafael
 */
public class Kiste {
    
    
    public static int maxKisten =50;
    private static int kistenAnzahl =1;
    
    private int id;
    private double breite;
    private double hoehe;
    private double tiefe;
    private double volumen;
    
    public Kiste( double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        if( lager.size() <maxKisten){
            this.id =kistenAnzahl;
            this.hoehe =hoehe;
            this.breite =breite;
            this.tiefe =tiefe;
            setVolumen( hoehe, breite, tiefe);
            System.out.println( "Kiste mit der ID " +this.id +" gebaut.");
            kistenAnzahl++;
        } else{
            System.out.println( "Das Lager ist voll");
        }
    }
    
    public void loeschen( int id, ArrayList<Kiste> lager){
        boolean zerstoert =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get( i).getID()){
                    lager.remove( i);
                    System.out.println( "Kiste mit der ID " +id +" wurde vernichtet.");
                    zerstoert =true;
                } else{}
            } else{}
        }
        if( zerstoert ==false){
            System.out.println( "Kiste mit der ID " +id +" wurde nicht gefunen.");
        }
    }
    
    public Kiste eingabe( int id, ArrayList<Kiste> lager){
        Kiste kiste =null;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    System.out.println( "Kiste Nr " +( i +1));
                    System.out.println( "     ID =" +kiste.getID());
                    System.out.println( " Breite =" +kiste.getBreite());
                    System.out.println( "   Höhe =" +kiste.getHoehe());
                    System.out.println( "  Tiefe =" +kiste.getTiefe());
                    System.out.println( "Volumen =" +kiste.getVolumen());
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde gefunden");
        }
        return kiste;
    }
    
    public int getID(){
        return this.id;
    }
    
    public double getBreite(){
        return this.breite;
    }
    private void setBreite( double breite){
        this.breite =breite;
    }
    
    public double getHoehe(){
        return this.hoehe;
    }
    private void setHoehe( double hoehe){
        this.hoehe =hoehe;
    }
    
    public double getTiefe(){
        return this.tiefe;
    }
    private void setTiefe( double tiefe){
        this.tiefe =tiefe;
    }
   
    public double getVolumen(){
        return this.volumen;
    }
    private void setVolumen( double hoehe, double breite, double tiefe){
        this.volumen =hoehe *breite *tiefe;
    }
    
    public void aendern( int id, double hoehe, double breite, double tiefe, ArrayList<Kiste> lager){
        Kiste kiste;
        boolean kistegefunden =false;
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                if( id ==lager.get(i).getID()){
                    kiste =lager.get( i);
                    kiste.setHoehe( hoehe);
                    kiste.setBreite( breite);
                    kiste.setTiefe( tiefe);
                    kiste.setVolumen( hoehe, breite, tiefe);
                    lager.set( i, kiste);
                    kistegefunden =true;
                } else{}
            } else{}
        }
        if( kistegefunden ==false){
            System.out.println( "Keine Kiste mit der ID " +id +" gefunden.");
        } else{
            System.out.println( "Kiste " + id +" wurde geändert");
        }
    }
    
    public void anzeigen( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                getKiste( lager.get( i).getID(), lager);
                System.out.println( "");
            } else{
                System.out.println( "Keine Kiste an der Position " + ( i +1) +" gefunden.");
            }
        }
    }

	public void alleanzeigen( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                int id =lager.get( i).getID();
                System.out.println( "Kiste Nummer " +(i+1) +"hat die ID " +id);
            } else{}
        }
    }


public static void main(String[] args) {
	
    //Vereinbarung des Arrays
    int[][] kistenArray = new int[50][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");
    System.out.println("X \t Programm beenden");
    
    funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
    funktion = funktionEinlesen.charAt(0);

//Auswahl auswerten

boolean exit = true;

while(exit){
	
	funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
	funktion = funktionEinlesen.charAt(0);
	
	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;
	
	case 'e':
	case 'E':
	System.out.println("\nSie haben Daten aller Kiste anzeigen gewählt");
	alleanzeigen(kistenArray);
	break;
	
	case 'x':
	case 'X':
	exit = false;
	System.out.println("\nSie haben das Programm beendet.");

}
} 

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






strußi hat gesagt.:


> dann nimm doch meinen code und schreib einfach in deinem menü, die methoden rein, die du für die jeweilige aktion brauchst,
> 
> du hast doch schon dein menü über das du die aktionen auslöst und da musst du nur noch die aktion aus meinem code anbinden und fertig ist es
> 
> unter a rufst du den konstruktor auf, und lässt dir von benutzer die werte für länge breite tiefe eingeben und gibts ihm dafür die kisten id zurück


----------



## strußi (8. Mai 2014)

fehler: du probierst int[][] zu übergeben wo diese nicht als parameter angenommen werden können

wenn du fremdcode nimmst, dann solltest du diesen auch anpassen, bzw deinen eigenen anpassen dass alles funktioniert

erstmal solltest du von deinem ein-klassendesigne weg kommen

nen ganz heißer tipp ist http://de.wikipedia.org/wiki/Model_View_Controller#Steuerung_.28controller.29

erstelle mal folgendes
1. Klasse:
das modell (nur die Kiste mit allen ihren fähigkeiten)
kennt nur sich selbst

2. Klasse:
die view ( nur die Anzeige und die eingabe von werten)
kennt sich selbst und das modell

3. Klasse
der Controller( der holt sich die werte aus der view und führt die aktionen der kiste aus)
kennt sich selbst, das modell und die view

du hast doch deine Konsoleneingabemaske was deiner view entspricht und die aktionen die du ausführst werden dann von deiner controllerklasse ausgeführt. du triggerst über deine auswahl die methoden in deinem controller-klasse, die dann die Methoden in dem modell ausführt, oder schneller: direkt in der Modellklasse


----------



## bortir (10. Mai 2014)

Wie ist es denn möglich, die ArrayList als Parameter anzugeben? Hier in meinem Code
Und wie sieht der Code von den Methoden aus, welcher ich übergeben muss?




strußi hat gesagt.:


> fehler: du probierst int[][] zu übergeben wo diese nicht als parameter angenommen werden können
> 
> wenn du fremdcode nimmst, dann solltest du diesen auch anpassen, bzw deinen eigenen anpassen dass alles funktioniert
> 
> ...


----------



## strußi (10. Mai 2014)

sichtbarkeit rückgabetyp methodenname( ArrayList<Typ> arrayList){}


----------



## bortir (10. Mai 2014)

Ein letztes Mal...

Da ich mit deiner Antwort nichts anfangen kann, bitte ich dich, mir ein Beispiel zu geben.

1. Ich brauche den Code, wie ich eine Methode aufrufen kann. Dieser muss hier rein passen:


Spoiler





```
public static void main(String[] args) {
    
    //Vereinbarung des Arrays
    int[][] kistenArray = new int[50][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");
    System.out.println("X \t Programm beenden");
    
    funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
    funktion = funktionEinlesen.charAt(0);
 
//Auswahl auswerten
 
boolean exit = true;
 
while(exit){
    
    funktionEinlesen=JOptionPane.showInputDialog("Wählen Sie eine Funktion");
    funktion = funktionEinlesen.charAt(0);
    
    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;
    
    case 'e':
    case 'E':
    System.out.println("\nSie haben Daten aller Kiste anzeigen gewählt");
    alleanzeigen(kistenArray);
    break;
    
    case 'x':
    case 'X':
    exit = false;
    System.out.println("\nSie haben das Programm beendet.");
 
}
}
```




2. Ich muss die ArrayList mit geben. Habe keine Ahnung wie man das machen muss. Bitte um den   passenden Code.

3. Ausserdem besteht noch ein Problem bei der Methode anzeigen. Hier funktioniert etwas mit getKiste noch nicht sauber.


Spoiler





```
public void anzeigen( ArrayList<Kiste> lager){
        for( int i =0; i <lager.size(); i++){
            if( lager.get( i) !=null){
                getKiste( lager.get( i).getID(), lager);
                System.out.println( "");
            } else{
                System.out.println( "Keine Kiste an der Position " + ( i +1) +" gefunden.");
            }
        }
    }
```




Besten Danke für Deine Hilfe


----------



## strußi (10. Mai 2014)

Wenn du mit den hinweisen nicht zurecht kommst, kann es vlt. an mangelnden grundkenntnissen liegen?

Wir helfen dir, aber sind nicht hier um deine komplette Aufgabe zu lösen!

Hilfestellung:
In dein switch case in dem kannst du für jeden fall eine methode hinterlegen die du aufrufst.

diese haben rückgabewerte und übergabeparameter, mit denen du "weiterarbeitest"

und nur mal zur veranschaulichung wie unformatierter code aussieht und wie man ihn lesen soll

z.b.
switch ( auswahl){
caste newKiste: 
menuKisteErstellen();
reopenMenu();
break;
case kisteloeschen:
menuKisteLoeschen();
reopenMenu();
break;
}


public void menuKisteErstellen(){
Kiste kiste =new Kiste( leange, breite, tiefe);
lager.add( kiste);
System.out.println( kiste.getID()); //einziger Kommentar - Methode von Kiste aufrufen um die ID des
//Kistenobjects zu erfragen und durch sys.o.p. an den Benutzer zurückzugeben. das funktioniert weil
//ID eine Objectvariable ist. Wenn du andere Infos als die Objectvaraiblen haben möchtest musst du
//die Referenz auf das Lager und die vom Benutzer abgefragte ID. das ist nicht so schwer
}

und so machst du das für alle anderen Fälle auch


----------



## kaoZ (10. Mai 2014)

Was genau willst du uns hiermit denn sagen ? 



> 1. Ich brauche den Code, wie ich eine Methode aufrufen kann. Dieser muss hier rein passen:



mal abgesehen davon das ich den Satz selbst im Kontext nicht verstehe, was muss wo rein passen  ?!



> Ich muss die ArrayList mit geben. Habe keine Ahnung wie man das machen muss. Bitte um den passenden Code.



wenn du eine ArrayList<?> als Parameter übergeben kannst dann mach das doch auch ?!


```
ArrayList<String> newList = new ArrayList<>();

addTo(newList);


public void addTo(ArrayList<String> list){....}
```



> 3. Ausserdem besteht noch ein Problem bei der Methode anzeigen. Hier funktioniert etwas mit getKiste noch nicht sauber.



Das ist keine Fehlerbeschreibung, was genau funktioniert denn nicht ?


----------



## strußi (10. Mai 2014)

es wir nichts angezeigt, weil er ein "leeres" sys.out benutzt ;-)


----------



## Zet (13. Nov 2014)

Edith sagt: die lagerVoll-Methode ist ein wenig Verquer... ^^

Sorry das ich dieses alte Thema ausgrabe, aber ich denke zur Lagerverwaltung gibt es bereits genügend Threads, so dass ich nicht einen neuen eröffnen muss.

Topic:
Habe eine realtiv ähnliche Lagerverwaltung mal programmiert, nun möchte ich eine Grafische Oberfläche dazu erstellen um das Handling zwischen Logik und GUI zu üben.
So sieht momentan die Konsolenversion aus, ohne Menü.

Ich habe folgende Klassen:
*Kiste *: 

```
package LagerverwaltungGUI;

public class Kiste
{
	private static  int kistenAnzahl =0;
	int ID;
	double breite;
	double laenge;
	double hoehe;
	double volumen;
	

	public Kiste(double breite, double laenge, double hoehe)
	{
		if (LagerVoll() == true ) 									// Lager nicht voll
		{
			
			this.ID = kistenAnzahl++;
			this.breite = breite;
			this.laenge = laenge;
			this.hoehe = hoehe;
			this.volumen = laenge * breite * hoehe;
		}
		else												// Lager voll
		{
			System.out.println("Das lager ist voll!");
			return;
		}
	}

	@Override
	public String toString()
	{
		return "***********************************\nKistennummer: " + ID + "\nBreite: " + this.breite
				+ "\nLaenge: " + this.laenge + "\nHoehe: " + this.hoehe
				+ "\nVolumen: " + this.volumen + "\n";

	}
	
	public boolean LagerVoll()
	{
		if (ID == 50)
		{
			return false;
		}
		return true;
	}
	


	public int getID()
	{
		return this.ID; 
	}
}
```


*
Verwaltung: *

```
package LagerverwaltungGUI;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Verwaltung
{
	public static void main(String[] args)
	{
		Verwaltung oVerwaltung = new Verwaltung();
		oVerwaltung.kisteErzeugen(1, 2, 3);
		oVerwaltung.kisteErzeugen(4, 5, 6);
		oVerwaltung.kisteErzeugen(7, 8, 9);
		oVerwaltung.KisteAnzeigen(5);

	}
	List<Kiste> kistenArray = new ArrayList<Kiste>();
	String fehlertext = "";
	public void kisteErzeugen(double breite, double laenge, double hoehe)
	{
		Kiste oKiste = new Kiste(breite, laenge, hoehe);
		kistenArray.add(oKiste);
	}

	public void kisteLoeschen(int Kistennummer)
	{
		for (Kiste k : kistenArray)
		{
			if (k.getID() == Kistennummer)
			{
				System.out.println(k.toString() +"\n wurde geloescht!");
				k = null;				
			}
		}

	}

	public void kisteAendern(int Kistennummer)
	{
		System.out.println("Welche Daten wollen sie Ändern?");
		System.out.println("Sie haben Volumen gewählt");
		getKiste(Kistennummer).volumen = 5;
		System.out.println("das neue Volumen von Kiste " +Kistennummer+ "ist "+getKiste(Kistennummer).volumen);
	}

	public void KisteAnzeigen(int Kistennummer)
	{
		if (checkKistennummer(Kistennummer))	// Prüft ob die ID überhaupt existiert!
		{
			System.out.println(getKiste(Kistennummer).toString());
		}
		

	}

	
	public Kiste getKiste(int Kistennummer)
	{
		for (Kiste k : kistenArray)
		{
			if (k.getID() == Kistennummer)
			{
				return k;			
			}
		}
		return null;
	}
	
	public void alleKistenAnzeigen()
	{
		for (Kiste k : kistenArray)
		{
			System.out.println(k.toString());
		}
	}
	
	public boolean checkKistennummer(int Kistennummer)
	{
		for (Kiste k : kistenArray)
		{
			if (k.getID() == Kistennummer)
			{
				return true;
			}
		}
		System.out.println("Die KIste mit der ID " +Kistennummer+" existiert nicht");
		alleKistenAnzeigen();
		return false;
	}
	

	

}
```



*Lagerverwaltung *= GUI


Nun baue ich eine ganz einfache GUI mit 5 Textfeldern zum eingeben bzw. anzeigen von:
ID, Breite, Hohe, Laenge, Volumen.

Nun möchte ich, falls ein Fehler auftritt - z.B. der Benutzer möchte eine Kiste hinzufügen, ohne das alle Parameter(Textfelder) gefüllt sind -  das ein Label mit Fehlertext ausgegeben wird. Oder einfach der Text des Textfeldes den Fehler ausgibt.

Sprich:


```
Class Lagerverwaltung(GUI)
.
.
.
JButton buttonKisteHinzufuegen= new JButton("Kiste Hinzuf\u00FCgen");
buttonKisteHinzufuegen.addActionListener(new ActionListener() 
{
	public void actionPerformed(ActionEvent arg0) 
	{
		try
		{
			oVerwaltung.kisteErzeugen(Double.parseDouble(textFeldBreite.getText()), Double.parseDouble(textFeldLaenge.getText()),Double.parseDouble( textFeldHoehe.getText()));
			textFeldVolumen.setText("Kiste erzeugt!");
                                 // FEHLER da ein benötigtes Feld nicht gefüllt ist!
		} 
		catch (Exception e)
		{
					
		}

	}
});
```

Wo (Welche Klasse, GUI soll ja möglichst keine Logik haben?) würdet ihr die Prüfung + Fehlermeldung erzeugen und ausgeben?

Verwaltung? GUI? Alles anders aufbauen?!???:L???:L???:L

Ich hoffe ich habe hier keine überflüssige Frage gestellt :/.

Ich bin schon öfter über solche Probleme bei der Trennung gestolpert, bis zu einem Gewissen punkt funkioniert das ja meistens noch, aber irgendwann ist Logik und GUI mehr oder weniger verschmolzen :shock:



Beste Grüße!
Zet


----------



## arilou (13. Nov 2014)

Als erstes solltest du die Methode .LagerVoll nach .nochPlatzDa o.ä. umbenennen, da sie gerade true/false andersherum zurückliefert.

Für Fehlermeldungen würde ich eine extra "Statusmeldungen" JTextArea anlegen; am schönsten in einer JScrollPane, und die Meldungen immer hinten anhängen...

Den try-catch würde ich im ActionListener belassen, aber als Meldung einfach die Beschreibung der Exception ausgeben:
myStatus.append( e.getLocalizedMessage() );
Der Exception einen vernünftigen Fehler-Text mitzugeben, ist Aufgabe der oVerwaltung(smethode).


----------

