3 Dimensionales Array mit

Moin,

ich habe das Problem, dass ich die Aufgabenstellung habe, dass ich ein Regal programmieren soll welches eine Länge X, eine Breite Y und jeweils zwei Einteiler in einem Fach hat, welches dieses in 3 Abschnitte (Z1,Z2,Z3) teilt.

Nun habe ich mir gedacht dass ich dies mit einem Dreidimensionalen Array programmieren kann:
int array [] [] []= new int [12] [8] [3]; -> Länge X=12, Breite Y=8 und jedes Fach hat 3 Einteiler.
-> Problem ist, dass es ja eig nur ein 2 dimensionales array ist, welches jede Spalte in 3 Einteiler unterteilt hat. D.h. ich kann das mit den 3 dimensional vergessen.

also: int array [] [] = new int [12] [8];
Nun hat jedes Fach in einer Reihe eine bestimmte Kapazität -> Reihe1 = 150 Reihe2 =40, Reihe3 =45 ... bis Reihe 8. (also Reihe = Breite)
-> d.h. Y1,X1 150 Kapazität, Y1,X2 150 Kapazität... Y2,X1 = 40 Kapazität, Y2,X2=40 Kapazität...

Frage ist nun wie kann ein zweidimensionales Array erstellen welches Kapazitäten hat und ebenfalls in jeder Spalte ein Fach mit 3 Einteiler hat. (es ist nicht angegeben wie die Kapazität in den drei Einteilern verteilt ist.)

PS: Dies ist nur ein kleiner Teil vom ganzen, damit meine ich dass dies zu einem großen Programm gehören soll, welches mit GUI und ner Datenbank funktioniert. Die Logistik muss ich nicht machen, lediglich die Regale programmieren.
Wenn jemand mir einen Ansatz geben könnte, wie ich sowas programmieren kann, wäre ich sehr glücklich. Problem ist nämlich, dass ich weiß was ich machen muss, nur habe ich keine ahnung wie ich es umsetzen soll.
 
Dies ist nur ein kleiner Teil vom ganzen, damit meine ich dass dies zu einem großen Programm gehören soll, welches mit GUI und ner Datenbank funktioniert. Die Logistik muss ich nicht machen, lediglich die Regale programmieren.
Wird das ein ernsthaft eingesetztes Projekt oder ist es nur eine Übung?

Als Übung ist es in Ordnung, wenn du mit Arrays experimentierst. Ansonsten würde man einen eher objektorientierten Ansatz suchen.

Edit:

Nun hat jedes Fach in einer Reihe eine bestimmte Kapazität
Was ist denn Kapazität jetzt nun wieder? Ergibt sich die Kapazität einer Reihe nicht aus Anzahl der Fächer (= Spalten) x 3 (3 Abschnitte pro Fach)?
 
Zuletzt bearbeitet:
dass ich ein Regal programmieren soll welches eine Länge X, eine Breite Y und jeweils zwei Einteiler in einem Fach hat, welches dieses in 3 Abschnitte (Z1,Z2,Z3) teilt.
Für mich ist deine Problembeschreibung schon mal unklar: Wo genau besteht bei dir der Unterschied zwischen "Breite" und "Länge" eines Regals? Allgemein gibt es Breite, Höhe und Tiefe. Was ist bei dir "Länge"?
Desweiten: Die Maße des Regals sind doch eigentlich uninteressant. Wichtig ist doch nur, in wie viele Teile das Regal entlang seiner Breite/Horizontalen und entlang seiner Höhe/Vertikalen aufgeteilt sind.
Wenn das Regal entlang seiner Breite also in 12 "Spalten" unterteilt ist und entlang seiner Höhe in 8 "Zeilen", dann ist das schonmal ein zweidimensionales Array, da wir ja zwei Dimensionen benötigen. Wenn jetzt jede "Zelle" in diesem Regal nochmal eine Dreiteilung hat, dann kann das als weitere Dimension angesehen werden und du könntest hierfür ein dreidimensionales Array verwenden.
 
@httpdigest also ein dreidimensionales array benutzen? Aber wie kann ich dort die Kapazität benutzen?
Theoretisch müsste ich eine Abfrage machen wie viele VE pro Spalte eingetragen ist oder?

https://gyazo.com/68f0a463f954be2d844c3d02db8daec7 -> hier mal ein Foto was ich mit X und Y meine. Und jede spalte von X1,Y1, X1,Y2 etc. hat eine bestimmte kapazität.
d.h. ein Fach welches in 3 Teile aufgeteilt ist hat diese bestimmte Kapazität -> Bsp: Y1,X1 ist ein Fach welches aus 3 Teile besteht und insgesamt eine Kapazität von 150 hat.
 
So mal als Ansatz:

Java:
class Fach {
    private int kapazitaet;
    
    public Fach(int kapazitaet) {
        this.kapazitaet = kapazitaet;
    }

    public int getKapazitaet() {
        return this.kapazitaet;
    }
}

class Regal {
    private Map<Integer, Fach> faecher = new HashMap<>();

    public void  add(Fach fach, int x, int y) {
        faecher.put(x * y, fach);
    }

    public void remove( int x, int y) {
        faecher.remove(x * y);
    }

    public Fach getFach(int x, int y) {
        return faecher.get(x * y);
    }
}
 
Also ich habe mal einen anderen Weg eingeschlagen und bin soweit gekommen. Jedoch bekomme ich nun die Fehlermeldung
"Exception in thread "main" java.lang.NullPointerException
at Design.test.main(test.java:21)"
Ich hab keine ahnung woran es liegt... Ich habe schon probiert den Fehler durch nen System.out.println anweisung auswendig zu machen aber habe nichts gefunden...


Code:
package Design;

public class Regelfach {
    private double fachVeKapazität;
    private double aktuelleVE;
    private double z1,z2,z3;
    private String nr;
   
    public Regelfach(double Fassungsvermögen, String Nummer) {
        this.fachVeKapazität = Fassungsvermögen;
        z1 = Fassungsvermögen / 3;
        z2 = Fassungsvermögen / 3;
        z3 = Fassungsvermögen / 3;
    }
   


    public int istFachVoll(int aktuelleVE, int fachVeKapazität) {
        // mit getter und setter das machen
        if (fachVeKapazität > aktuelleVE) {
            int nochfreiVE= fachVeKapazität - aktuelleVE;
            System.out.println(nochfreiVE);
            return nochfreiVE;
        }
        else {
            int nochfreiVE = fachVeKapazität - aktuelleVE;
            System.out.println("Das Fach ist voll!");
            return nochfreiVE;
        }
    }
   
   
   
    public double getFachVeKapazität() {
        return fachVeKapazität;
    }
    public void setFachVeKapazität(double fachVeKapazität) {
        this.fachVeKapazität = fachVeKapazität;
    }
    public double getAktuelleVE() {
        return aktuelleVE;
    }
    public void setAktuelleVE(double aktuelleVE) {
        this.aktuelleVE = aktuelleVE;
    }
    public double getZ1() {
        return z1;
    }
    public void setZ1(double z1) {
        this.z1 = z1;
    }
    public double getZ2() {
        return z2;
    }
    public void setZ2(double z2) {
        this.z2 = z2;
    }
    public double getZ3() {
        return z3;
    }
    public void setZ3(double z3) {
        this.z3 = z3;
    }
    public String getNr() {
        return nr;
    }
    public void setNr(String nr) {
        this.nr = nr;
    }
   
}

package Design;



Code:
import java.util.ArrayList;

public class HalbhohesRegal extends Regal {
   
    private int längeX;
    private int breiteY;
    private double tiefe; //einfache mittlere und große     -> normale VE, 25% mehr, 100% mehr
    private String Breite; //volle Breite/Drittel Breite
   
    private Regelfach[][] Fach = new Regelfach [12] [8];
   
   
    HalbhohesRegal (String NummerD, String BreiteD, String tiefeD){
       
        Fach = new Regelfach [12] [8];
        setNummer(NummerD);
        this.Breite = BreiteD;
        if(tiefeD =="VolleBreite") {
            längeX=12;
            breiteY=8;
        }
        if(tiefeD == "DrittelBreite")  {
            längeX=4;
            breiteY=8;
        }
       
        if(tiefeD == "einfacheTiefe") {
            tiefe =1.0;
        }
        if(tiefeD == "mittlereTiefe") {
            tiefe = 1.25;
        }
        if(tiefeD == "großeTiefe") {
            tiefe = 2.0;
        }
       
       
        // Es wird das Fassungsvermögen für jedes Regalfach ausgerechnet
        for (int i=0;i<längeX;i++) {
            Fach[i][0] = new Regelfach (150*tiefe, getNummer());
            }
        for (int i=0;i<längeX;i++) {
            Fach[i][1] = new Regelfach (40*tiefe, getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][2] = new Regelfach (45*tiefe, getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][3] = new Regelfach (60*tiefe, getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][4] = new Regelfach (60*tiefe, getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][5] = new Regelfach (50*tiefe,  getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][6] = new Regelfach (95*tiefe,  getNummer());
        }
        for (int i=0;i<längeX;i++) {
            Fach[i][7] = new Regelfach (140*tiefe,  getNummer());
        }
            }
        //als nächstes Regalnummer ausgeben und Breite-Länge mitgeben um später kürzesten weg zu finden
       
       
       
   
   
    public Regelfach getHalbhohesRegel (int x, int y) {
        return Fach [x] [y];
    }
   
    public int getLängeX() {
        return längeX;
    }

    public void setLängeX(int längeX) {
        this.längeX = längeX;
    }

    public int getBreiteY() {
        return breiteY;
    }

    public void setBreiteY(int breiteY) {
        this.breiteY = breiteY;
    }
   
    public double getTiefe() {
        return tiefe;
    }

    public void setTiefe(double tiefe) {
        this.tiefe = tiefe;
    }

    public String getBreite() {
        return Breite;
    }

    public void setBreite(String breite) {
        Breite = breite;
    }

    public Regelfach[][] getFach() {
        return Fach;
    }

    public void setFach(Regelfach[][] fach) {
        Fach = fach;
    }
}
 
Also ich habe mal einen anderen Weg eingeschlagen und bin soweit gekommen. Jedoch bekomme ich nun die Fehlermeldung
"Exception in thread "main" java.lang.NullPointerException
Du versuchst irgendwo auf einen Wert zuzugreifen, der Null ist. Wo? Keine Ahnung.

Ansonsten. Ja. Was soll man sagen. Da ist ziemlich viel, sagen wir mal, Unschönes zu sehen. Das geht bei einfachen Konventionen los, wie lowerCamelCase für Variablennamen und endet bei einem kaum enden wollenden Einsatz von magic values. Ich habe die genauen Anforderungen aus deinen bisherigen Erklärungen noch nicht verstanden, aber ich kann dir jetzt schon sagen: das geht besser. Und vermutlich einfacher. Und übersichtlicher.

Allerdings vermute ich jetzt mal, dass es sich bei dir um einen Java-Anfänger handelt und das es sich hier um ein Übungsprojekt handelt. Das wird schon noch.
 
Funky... hast du schonmal was von räumlichen Körpern gehört?
Code:
    public Regelfach(double Fassungsvermögen, String Nummer) {
        this.fachVeKapazität = Fassungsvermögen;
        z1 = Fassungsvermögen / 3;
        z2 = Fassungsvermögen / 3;
        z3 = Fassungsvermögen / 3;
    }
Das ist einfach nicht richtig...
Mal davon ab, dass man Variablen klein und ohne Umlaute schreibt...
Wenn du hier als Fassungsvermögen 10 reinwirfst, dann hat z1 / 2 / 3 je 10/3 wasauchimmer
Bleiben wir mal beim Holzregal:
10 Regalböden (Zeilen) mit je
10 Abtrennungen / Fächern (Spalten) mit je
10 Einsteckplätzen (Ablagen etc)

das heisst, du hast nicht 30 Fassungsvermögen sondern 10*10*10 = 1000 gibst du in deine Funktion 1000 ein, hast du z1/2/3 von 333.3 ...
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben