2dimensionales array, Lagerverwaltung

Diskutiere 2dimensionales array, Lagerverwaltung im Java Basics - Anfänger-Themen Bereich.
C

Codix

Steht doch direkt unter meiner Anmerkung.
Anzeigen der Daten einer vorhandenen Kiste (das wollte ich so machen: nach der Eingabe, kommt die Ausgabe in der Konsole, sie soll das anzeigen)

und

eine Listenfunktion, die die Daten aller vorhandenen Kisten anzeigt.

mit if ( eine best. Nr. der Kiste =>Daten einer vorhandenen Kiste werden angezeigt), else ( die gesamte Liste anzeigen)


oder

die Liste bei der Eingabe eines best. Befehls.

z.B. JOption..("Tippen Sie " + Liste + ", um die komplette Kistenliste anzeigen zu lassen."

anzeigen lassen.

ausgabe: System.. ("Liste");

was hälst du davon@temi? Danke im Voraus
 
T

temi

Anzeigen der Daten einer vorhandenen Kiste (das wollte ich so machen: nach der Eingabe, kommt die Ausgabe in der Konsole, sie soll das anzeigen)

und

eine Listenfunktion, die die Daten aller vorhandenen Kisten anzeigt.

mit if ( eine best. Nr. der Kiste =>Daten einer vorhandenen Kiste werden angezeigt), else ( die gesamte Liste anzeigen)


oder

die Liste bei der Eingabe eines best. Befehls.

z.B. JOption..("Tippen Sie " + Liste + ", um die komplette Kistenliste anzeigen zu lassen."

anzeigen lassen.


ausgabe: System.. ("Liste");

was hälst du davon@temi? Danke im Voraus
Du solltest an deinem Textverständnis arbeiten. Die Aufgabe sagt klar und eindeutig etwas anderes.

Eine Methode, um die Daten einer Kiste anzuzeigen, und
eine Methode, um die Daten aller Kisten anzuzeigen.

An dieser Stelle brauchst du keine if..else.

Eine der beiden Methoden, benötigt einen Parameter, um die anzuzeigende Kiste zu identifizieren, die andere braucht keine Parameter.
 
C

Codix

Also erst mal ist das nur ein Beispiel. In dem Beispiel bin ich der Anwender und ich habe sie an genau dieser Stelle mit den Werten gefüllt, die ich mir gewünscht hatte. Ob du die Abmessungen einer neuen Kiste durch Konsoleneingabe oder aus einer GUI erhältst und dann die Kiste entsprechend "einlagerst" ist deine Sache. Mach es, wie du es dir wünscht, bzw. die Aufgabe es fordert:



Da fehlen aber noch zwei Methoden:


Und was die Methode kisteÄndern() angeht; du übergibst die id, damit die Kiste identifiziert werden kann, aber was ist mit den zu ändernden Werte?


Seltsame Frage. Was sollt ihr da machen? Einen Tätigkeitsbericht zum Thema, wie schreibe ich ein Programm?
ich denke: wir haben die Instanz erzeugt der Variablen erzeugt:

Code:
         Lagerverwaltung lager = new Lagerverwaltung();

Um eine Instanz zu erzeugen, legen wir eine Variable mit dem Typ der Klasse (hier: Lagerverwaltung) an.

Das Erzeugen der Instanz erfolgt mit dem Operator "new", dem Namen der Klasse und den () Klammern.

Der Zugriff auf die Methoden erfolgt durch den Bezeichner der Variablen für die Instanz, einen trennenden Punkt und den Namen der Methoden.


Code:
// warum heisst das int id = ..  & nicht einfach lager.neueKiste(10..);.
//warum ist das int id davor? 

 int id = lager.neueKiste(10,10,10);

        

            // Kiste wieder aus dem Lager löschen

            lager.kisteLoeschen(id);

        

            // Kiste ändern

            lager.kisteAendern(id);
frage: s. code:
// warum heisst das int id = .. & nicht einfach lager.neueKiste(10..);.
//warum ist das int id davor?

Danke im Voraus.
 
T

temi

warum heisst das int id = .. & nicht einfach lager.neueKiste(10..);
Das was du geschrieben hast geht auch, du musst den Rückgabewert ja nicht verwenden. Ich habe mich entschieden, die id der erstellten Kiste zu "merken", damit ich in der Methode kisteLoeschen() wieder darauf zurück greifen kann.

Die id der neuen Kiste wird ja innerhalb der Klasse Kiste erzeugt (sagt die Aufgabe). Du kannst also nicht im Voraus wissen, welche id die nächste neue Kiste haben wird. Darum könnte es sinnvoll sein, dass die Methode neueKiste() als Rückgabewert die erzeugte id liefert. Wie die id aufgebaut ist, kannst du ja selbst festlegen, hier ist es ein int, du kannst z.B. auch String wählen.

Für deine Aufgabe reicht es wahrscheinlich über den Aufruf der Methode alleKistenAusgeben() eine Liste der vorhandenen Kisten, inkl. deren ids zu erhalten. Damit kann der Benutzer auch die gewünschte Kiste ermitteln.
 
C

Codix

Das was du geschrieben hast geht auch, du musst den Rückgabewert ja nicht verwenden. Ich habe mich entschieden, die id der erstellten Kiste zu "merken", damit ich in der Methode kisteLoeschen() wieder darauf zurück greifen kann.

Die id der neuen Kiste wird ja innerhalb der Klasse Kiste erzeugt (sagt die Aufgabe). Du kannst also nicht im Voraus wissen, welche id die nächste neue Kiste haben wird. Darum könnte es sinnvoll sein, dass die Methode neueKiste() als Rückgabewert die erzeugte id liefert. Wie die id aufgebaut ist, kannst du ja selbst festlegen, hier ist es ein int, du kannst z.B. auch String wählen.

Für deine Aufgabe reicht es wahrscheinlich über den Aufruf der Methode alleKistenAusgeben() eine Liste der vorhandenen Kisten, inkl. deren ids zu erhalten. Damit kann der Benutzer auch die gewünschte Kiste ermitteln.
somit haben wir die Methode, um Daten aller Kisten anzuzeigen :)

Code:
//in der public class Lagerverwaltung

alleKistenausgeben()



//in der main class dann so aufrufen, weil wir die Instanz der class bereits erzeugt haben :


lager.alleKistenAusgeben()
Die Methode, um Daten einer Kiste anzuzeigen wäre hiermit:

Code:
//in der public class Lagerverwaltung

kisteAusgeben()



//in der main class dann so aufrufen, weil wir die Instanz der class bereits erzeugt haben :


lager.kisteAusgeben(id)
 
C

Codix

Codeentwurf zu dem, was bis jetzt hier im thread besprochen wurde:

Code:
public class Lagerverwaltung {
 
    private final static int ANZ_KISTEN = 75; // hier Vorgabewert angeben
    private final static int ANZ_FELDER = 3; // dito

    private int[][] kisten = new int[75][3];



    // Beispiel: Methode, um eine Kiste zu löschen.
    // Für die id wurde hier int gewählt, das steht dir ja frei, was du da nehmen möchtest
    public void kisteLoeschen(int id) {
        // code
    }
 
public void alleKistenausgeben(){

}
 
  public void kisteAusgeben(int id){
   
  }

}

 
public class Main {

    public static void main(String[] args) {
   
        Lagerverwaltung lager = new Lagerverwaltung();
   
        // Kiste mit den Abmessungen 10x10x10 dem Lager hinzufügen und id der Kiste merken
        int id = lager.neueKiste(10,10,10);
   
        // Kiste wieder aus dem Lager löschen
        lager.kisteLoeschen(id);
     
        // Kiste ändern
        lager.kisteAendern(id);
   
//alle Kisten anzeigen lassen
lager.alleKistenAusgeben();

// bestimmte Kiste anzeigen lassen
lager.kisteAusgeben(id);
 
    }

}

JOptionPane.showInputDialog(" hier das gewünschte Kommando: a für kiste loeschen, b für kiste aedern, c für alle Kisten ausgeben, d für bestimmte Kiste ausgeben ")

hier vllt die switch-Schleife:
case: a
case: b
case: c
case: d

      System.out.println(a,b,c oder d);
    }
}
bitte um eure Antworten, Vorschläge

Danke im Voraus
 
T

temi

Ich habe es oben schon einmal geschrieben und schreibe es noch einmal: Lass erst mal die GUI (also die Sachen mit JOptionPane usw.) weg und kümmere dich um deine Klasse Lagerverwaltung.

Implementiere die Methoden und probiere sie über einen entsprechenden Aufruf in der main() aus. Wenn alles funktioniert, wie gewünscht, dann kommt die "Bedienoberfläche" mit den Auswahlmenü.

Noch ein Beispiel dafür wie, ich das meine:
Java:
public class Mathe {
   
    public int addiere(int a, int b) {
        return  a + b;
    }
}

public class Test {
   
    public static void main(String[] args) {
       
        Mathe m = new Mathe();
       
        // Die erwartete Ausgabe wäre "10"
        System.out.println(m.addiere(5,5));
    }
}
So machst du das mit all deinen Methoden der Klasse Lagerverwaltung.
 
C

Codix

Ich habe es oben schon einmal geschrieben und schreibe es noch einmal: Lass erst mal die GUI (also die Sachen mit JOptionPane usw.) weg und kümmere dich um deine Klasse Lagerverwaltung.

Implementiere die Methoden und probiere sie über einen entsprechenden Aufruf in der main() aus. Wenn alles funktioniert, wie gewünscht, dann kommt die "Bedienoberfläche" mit den Auswahlmenü.

Noch ein Beispiel dafür wie, ich das meine:
Java:
public class Mathe {
  
    public int addiere(int a, int b) {
        return  a + b;
    }
}

public class Test {
  
    public static void main(String[] args) {
      
        Mathe m = new Mathe();
      
        // Die erwartete Ausgabe wäre "10"
        System.out.println(m.addiere(5,5));
    }
}
So machst du das mit all deinen Methoden der Klasse Lagerverwaltung.
ich probies gleich aus & melde mich dann! :)
 
C

Codix

ich probies gleich aus & melde mich dann! :)
Code:
public class Lagerverwaltung {
    private final static int ANZ_KISTEN = 75; // hier Vorgabewert angeben
    private final static int ANZ_FELDER = 3; // dito

    private int[][] kisten = new int[75][3];



    // Beispiel: Methode, um eine Kiste zu löschen.
    // Für die id wurde hier int gewählt, das steht dir ja frei, was du da nehmen möchtest
    public void kisteLoeschen(int id) {
        // code
    }
 
  public void kisteAusgeben(int id){
  
  }

public void alleKistenAusgeben() {
    // TODO Auto-generated method stub
    
}

public void kisteAendern(int id) {
    // TODO Auto-generated method stub
    
}

public int neueKiste(int i, int j, int k) {

    // vllt muss hier return: i, j, k; stehen, ich bekomme darauf eine Fehlermeldung
    return 0;
}

}




public class Main {

    public static void main(String[] args) {
  
        Lagerverwaltung lager = new Lagerverwaltung();
  
        // Kiste mit den Abmessungen 10x10x10 dem Lager hinzufügen und id der Kiste merken
        int id = lager.neueKiste(10,10,10);
  
        // Kiste wieder aus dem Lager löschen
        lager.kisteLoeschen(id);
    
       // Kiste ändern
       lager.kisteAendern(id);
  
//alle Kisten anzeigen lassen
lager.alleKistenAusgeben();

// bestimmte Kiste anzeigen lassen
lager.kisteAusgeben(id);

//egal welche Methode ich hier eintippe =>Fehler
System.out.println(lager.kisteAendern(54));
    }

}
Fehler! Ich kann nichts ausdrucken. Versch. Fehler! Was genau sollte korregiert werden? Bitte um Hilfe!
 
T

temi

Versch. Fehler! Was genau sollte korregiert werden? Bitte um Hilfe!
Wie wäre es denn, wenn du auch ein wenig Code in deine Methodenrümpfe schreiben würdest? Der gezeigte Code ist so nicht lauffähig. Du sollst die Klasse Lagerverwaltung vollständig implementieren, nicht nur die Signaturen hinschreiben...

In deinem anderen Thema zu JavaFx hattest du geschrieben, dass du in dem Kurs fast durch bist. Da sollte das alles ein Klacks sein.

Falls dir das alles noch zu schwer fällt, dann solltest du evtl. noch mal ein paar Kapitel zurück gehen. Aufgrund deiner Fragen, habe ich den Eindruck, als wärst du etwas überfordert. Es ist schon wichtig die Themen der Reihe nach zu behandeln und auch zu verstehen, bevor man das nächste Thema beginnt.
 
C

Codix

Wie wäre es denn, wenn du auch ein wenig Code in deine Methodenrümpfe schreiben würdest?

Du sollst die Klasse Lagerverwaltung vollständig implementieren, nicht nur die Signaturen hinschreiben...

In deinem anderen Thema zu JavaFx hattest du geschrieben, dass du in dem Kurs fast durch bist. Da sollte das alles ein Klacks sein.

Falls dir das alles noch zu schwer fällt, dann solltest du evtl. noch mal ein paar Kapitel zurück gehen. Aufgrund deiner Fragen, habe ich den Eindruck, als wärst du etwas überfordert. Es ist schon wichtig die Themen der Reihe nach zu behandeln und auch zu verstehen, bevor man das nächste Thema beginnt.
Du meinst die Methoden vollständig implementieren?
Ich bin mit dem Kurs nicht ganz durch, habe in dem JavaFX thread was anderes gemeint (dass ich die Themen grob alle durch habe, aber sie praktisch noch nicht umsetzen kann, durchgelesen, aber noch nicht praktsich programmiert).
also 1/4wegs habe ich es drauf.

Das ist jetzt auch ein Anfängerthema, mein Niveau, ich gehe jetzt auch nicht einfach weiter und überspringe das.

JavaFX wollte ich kennenlernen, bevor ich damit anfange. Habe einen Udemy Kurs gekauft und dort einwenig JavaFX probiert. Mehr nicht. Ich bin jetzt schon noch auf diesem Niveau (Lagerverwaltung).
 
T

temi

Du meinst die Methoden vollständig implementieren?
Wie willst du eine Methode testen (also ausprobieren, ob sie funktioniert), wenn du sie nicht vollständig implementierst? Aber: Ja, genau das.

Du kannst natürlich mit einer Methode z.B. neueKiste() beginnen und diese zuerst testen und so Schritt für Schritt alle Methoden bearbeiten. Sinnvoll wäre (auch zum Testen) danach die Methode alleKistenAusgeben() zu nehmen. Der Test wäre dann eine oder mehrere Kisten einzulagern und danach auszugeben, ob sie auch im Lager sind. Wenn das gut klappt kannst du weiter machen.
 
C

Codix

Methoden implementieren: den genauen code in die Methoden reinschreiben?
z.B.: Code zum Ändern der Kiste.
Code zum alleKistenausgeben, etc.

Code:
..
    public void kisteLoeschen(int id) {
        // Code in die Anweisungsblöcke der Methoden reinschreiben = Implementieren?
    }

public void alleKistenausgeben(){
//soll ich 75 hier reinschreiben?
}

  public void kisteAusgeben(int id){
   //Kisten id?
  }

}
bitte um ein Bsp. oder die korrekte Befüllung. Ich verstehe es an Beispielen am besten. Habe online leider nichts zu (Implementierung der Methoden) gefunden. Hast du gute Links?

oder sollte ich die Implememntierung nicht in main class vornehmen?

Aber wir haben 75 Kisten. Wenn es 1 Kiste wäre, dann könnte ich es machen, aber mit 75 noch nicht.
Habs noch nicht drauf.
 
C

Codix

Code:
public class Lagerverwaltung {

    private final static int ANZ_KISTEN = 75; // hier Vorgabewert angeben

    private final static int ANZ_FELDER = 3; // dito



    private int[][] kisten = new int[75][3];

    private int id;







    // Beispiel: Methode, um eine Kiste zu löschen.

    // Für die id wurde hier int gewählt, das steht dir ja frei, was du da nehmen möchtest

    public void kisteLoeschen(int id) {

        this.id = id;

        // code

    }



  public void kisteAusgeben(int id){

   this.id = id;

  }



public void alleKistenAusgeben() {

    // hierzu fällt mir nichts ein, was soll denn alle Kisten repräsentieren? Welche Variable?

 

}



public void kisteAendern(int id) {

 

    this.id = id;

}



public int neueKiste(int i, int j, int k) {



    // vllt muss hier return: i, j, k; stehen, ich bekomme darauf eine Fehlermeldung

    return neueKiste(0, 0, 0);

}



}







public class Main {



    public static void main(String[] args) {

 

        Lagerverwaltung lager = new Lagerverwaltung();

 

        // Kiste mit den Abmessungen 10x10x10 dem Lager hinzufügen und id der Kiste merken

        int id = lager.neueKiste(10,10,10);

 

        // Kiste wieder aus dem Lager löschen

        lager.kisteLoeschen(id);

  

       // Kiste ändern

       lager.kisteAendern(id);

 

//alle Kisten anzeigen lassen

lager.alleKistenAusgeben();



// bestimmte Kiste anzeigen lassen

lager.kisteAusgeben(id);







//egal welche Methode ich hier eintippe =>Fehler



// The method println(boolean) in the type PrintStream is not applicable for the arguments (void)



System.out.println(lager.kisteLoeschen(64));

    }



}
ich habs nochmals versucht, zu implementieren
 
C

Codix

Ei, ei, ei... bei Dir fehlt aber schon wirklich jede Grundlage.

Wozu dient denn

? Was wird da gespeichert oder soll da gespeichert werden? Kannst Du das Array visualisieren?
Es sollte ein array sein 2 dimensional, mit 4 Spalten (id, Länge, Höhe, Breite). Das soll dort gespeichert werden. Ich visualisiere es als zwei.dimensionales array (also 4 Spalten).
ID rufen wir immer so ab:
Länge

[4 spalten für id, Länge, Höhe, Breite][75 zeilen für 75 Kisten]

muss es so aussehen?

private int[][] kisten = new int[4][75];
 
Thema: 

2dimensionales array, Lagerverwaltung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben