2dimensionales array, Lagerverwaltung

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

Codix

Du sollst nicht nach Links und Anleitungen suchen, sondern selbst denken und die Aufgabe lösen. Das ist der Sinn der ganzen Sache. Abschreiben bringt dir gar nichts.
ich muss das Ganze erstmal verstehen, wie das Implementieren funktioniert.

Bring mir doch mal ein konkretes Bsp mit Implementierungen, dann werde ich es verstehen und anwenden können.

Liege ich denn mit meinen Versuchen völlig daneben?
 
mihe7

mihe7

muss es so aussehen?
Muss nicht, aber Du könntest es so machen. In der Regel gibt man aber zuerst die Zeile, dann die Spalte an. Das hat einen Grund, den Du in Kürze erkennen wirst.

Für die Anzahl hast Du Konstanten definiert, die solltest Du auch verwenden: new int[ANZ_KISTEN][ANZ_FELDER].

Das Array kisten bietet nun also Platz für ANZ_KISTEN Kisten. Vergessen wir dieses Array mal für einen Moment und erstellen eine neue Kiste. Was müsstest Du schreiben, um eine (einzige) Kiste zu erstellen?
 
H

handshake45

Moin, ich habe die Aufgabenstellung nicht genau gelesen aber so könntest du anfangen:
Java:
import java.util.Arrays;

public class Lagerverwaltung {

	private static final int DIM_A = 75;
	private static final int DIM_B = 3;
	private int[][] kisten = new int[DIM_A][DIM_B];
	private int index = 0;

	public int size() {
		return index;
	}

	public boolean isEmpty() {
		return index == 0;
	}

	public boolean isFull() {
		return index == kisten.length;
	}

	public void add(int l, int b, int h) {
		if (isFull()) {
			throw new IllegalArgumentException("ioob");
		}
		kisten[index] = new int[] { l, b, h };
		index++;
	}

	public int[] get(int i) {
		if (i < 0 || i >= index) {
			throw new IllegalArgumentException("ioob");
		}
		return kisten[i];
	}

	public int[] del1() {
		if (isEmpty()) {
			throw new IllegalArgumentException("ioob");
		}
		index--;
		return kisten[index];
	}
	
	public void clear() {
		// TODO ...
	}

	public void print() {
		for (int i = 0; i < index; i++) {
			System.out.println(Arrays.toString(kisten[i]));
		}
	}

	public static void main(String[] args) {
		Lagerverwaltung lager = new Lagerverwaltung();
		lager.add(1, 1, 1);
		lager.add(2, 2, 2);
		System.out.println(lager.size());
		lager.add(3, 3, 3);
		lager.del1();
		lager.add(4, 4, 4);
		lager.print();
		while (!lager.isFull()) {
			lager.add(5, 5, 5);
		}
		while (!lager.isEmpty()) {
			lager.del1();
		}
		System.out.println(lager.size());
	}
}
Und dann noch der Hinweis dass man auch mit kisten[i][j] = ... auf ein einzelnes Element an der Stelle (i,j) im Kisten-Array zugreifen kann...
 
T

temi

Dank der tolle "Hilfe" von Tobias, hat sich alles weitere jetzt ja erledigt...
ich muss das Ganze erstmal verstehen, wie das Implementieren funktioniert.
Normalerweise ist ein Kurs so aufgebaut, dass man in kleinen Schritten immer mehr Grundlagen lernt und diese durch Übungen, die sich im Umfang und Schwierigkeit steigern, vertieft. So du deine bisherigen Kursinhalte sauber bearbeitet hast (und nicht nur abgeschrieben), dann sollte auch diese Übung für dich machbar sein. Und zwar durch selbständige Arbeit. Das dann mal was nicht funktioniert oder man an der einen oder anderen Stelle noch Fragen hat, das ist normal und genau dafür ist dieses Forum da.

Naja, durch die freundliche "Unterstützung" von @handshake45 hat sich das Thema ja jetzt erledigt. Schreib ab und werde glücklich damit.
 
H

handshake45

Allerdings wird er es so nicht abgeben können. Das ist ja keine korrekte Lösung
Er müsste eben die Methodennamen und alles Weitere abändern... und ein ToDo steht dort auch noch.
Naja, durch die freundliche "Unterstützung" von @handshake45 hat sich das Thema ja jetzt erledigt. Schreib ab und werde glücklich damit.
Sorry, aber man kann auch durch Quellcode etwas lernen, wenn man möchte... Und dieses Thema soll doch nicht 100 Beiträge lang werden oder? Iwann greift eine Grenze...
Also ich finde Quellcode und Hilfen an Stellen, an den man absolut nicht weiterkommt, wohl sinnvoll; anstatt auf die Eigeninitiative zu beharren.
 
C

Codix

Dank der tolle "Hilfe" von Tobias, hat sich alles weitere jetzt ja erledigt...

Normalerweise ist ein Kurs so aufgebaut, dass man in kleinen Schritten immer mehr Grundlagen lernt und diese durch Übungen, die sich im Umfang und Schwierigkeit steigern, vertieft. So du deine bisherigen Kursinhalte sauber bearbeitet hast (und nicht nur abgeschrieben), dann sollte auch diese Übung für dich machbar sein. Und zwar durch selbständige Arbeit. Das dann mal was nicht funktioniert oder man an der einen oder anderen Stelle noch Fragen hat, das ist normal und genau dafür ist dieses Forum da.

Naja, durch die freundliche "Unterstützung" von @handshake45 hat sich das Thema ja jetzt erledigt. Schreib ab und werde glücklich damit.
@temi: Ich habe die lösung von handshake nicht ganz verstanden & würde die Aufgabe gern mit dir & anderen zusammen zu Ende lösen.
oder hat deine Lösung genauso wie die von handshake ausgesehen?
 
C

Codix

Er müsste eben die Methodennamen und alles Weitere abändern... und ein ToDo steht dort auch noch.

Sorry, aber man kann auch durch Quellcode etwas lernen, wenn man möchte... Und dieses Thema soll doch nicht 100 Beiträge lang werden oder? Iwann greift eine Grenze...
Also ich finde Quellcode und Hilfen an Stellen, an den man absolut nicht weiterkommt, wohl sinnvoll; anstatt auf die Eigeninitiative zu beharren.
Danke für deinen Lösungsvorschlag. Durch Quellcode zu lernen ist oft sehr hilfreich.
 
H

handshake45

In der einzigen Methode, die bisher noch fehlerfrei ist. Sie wurde allerdings auch nicht gefordert. Zum Abarbeiten dieses ToDos genügt es also, die Methode wieder zu löschen. ;)
Na jetzt bin ich gespannt, was ist denn im Sinne der Aufgabenstellung ungenau...?

Denk dran ich schreibe niemals fehlerhaften Code ;)
 
C

Codix

Danke für die Beiträge.

So sieht jetzt der Entwurf des Lösungscodes aus (ohne Ein & Ausgabe in der Console).

Wir sind dabei die Methodenimplementierung richtig zu schreiben.

Ich habe es mit diesem Code versucht, brauche aber noch eure Ratschläge dazu, wie man Methoden richtig implementiert.

Vllt kann ja Handshake die Methodenimplementierung codieren (den Quellcode anbieten). das wäre perfekt.

Bitte um eure Antworten, was und wie zu verbessern wäre.

Danke im Voraus.

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[4][75];

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

    }



}
 
M

Meniskusschaden

Na jetzt bin ich gespannt, was ist denn im Sinne der Aufgabenstellung ungenau...?
Nicht ungenau sondern im Sinne der Aufgabenstellung falsch. Deine Lagerverwaltung unterstützt eben nur einen Kistenstapel. Man soll aber beliebig Kisten einfügen, ändern und entfernen können, solange man nicht die genannten Restriktionen verletzt. Dementsprechend falsch sind alle deine Methoden außer clear(). Außerdem sollen die Kisten nicht über ihre Array-Position identifiziert werden, sondern über ihre jeweilige ID.
 
H

handshake45

@Meniskusschaden Achso, es soll Kisten-Objekte geben...
🤦‍♂️
@Codix Dann kannst du in der Tat wenig damit anfangen denn die Aufgabenstellung umfasst Objekte... Sie ist also anders gelagert, um mal im Bild zu bleiben...
 
C

Codix

wenn du diesen Satz meinst: "Was müsstest Du schreiben, um eine (einzige) Kiste zu erstellen?"

Code:
public class Lagerverwaltung {
..

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

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

        int id = lager.neueKiste(4,10,10,10);
      
        }
        ..
dann würde ich es so probieren

& das array haben wir doch schon richtig deklariert, s. #40:

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];
 
mihe7

mihe7

dann würde ich es so probieren
Nein. Du sollst keine Methoden verwenden, sondern einfach eine "Kiste" erzeugen (s. u.)

muss es so aussehen?
Nein, andersrum, nochmal: #42 (jetzt weiß ich, warum 42 die Antwort auf alles ist :D) Warum das so ist, wirst Du sehen, wenn Du mal eine Kiste erzeugst.

Was ist in Deinem Modell denn eine Kiste? Wie wird eine einzelne Kiste denn dargestellt?
 
C

Codix

int[][]kiste = (4,10,10,10);

//oder so

Code:
public class Lagerverwaltung {

    public static void main(String[] args) {
        int[][] kiste = {{ Nummer 1, "Länge 10", "Höhe 10", "Breite 10" }};
        ..

// oder

public class Lagerverwaltung {

    public static void main(String[] args) {
        int [][] kisten = {

// Positionen [0,0 = Nummer1], [0,1 = Höhe 10], [0,2 = Länge 10], [0,3 = Breite 10]

                { "Nummer 1", "Höhe 10", "Länge 10", "Breite 10" },

// Positionen [1,0 = Nummer2], [1,1 = Höhe 12], [1,2 = Länge 12], [1,3 = Breite 12]

    {"Nummer 2", "Höhe 12", "Länge 12", "breite 12"},

//etc. };
 
Zuletzt bearbeitet:
H

handshake45

Was ist denn an meiner Implementierung, s. #43, falsch? Weil ich die IDs vergessen habe und die Methoden ganz anders heißen, stimmts?

@Codix Du musst bei Adam und Eva anfangen....
 
M

Meniskusschaden

Was ist denn an meiner Implementierung, s. #43, falsch? Weil ich die IDs vergessen habe und die Methoden ganz anders heißen, stimmts?
Hast du die Aufgabenstellung noch immer nicht gelesen? Angenommen man fügt 75 Kisten mit den IDs 0-74 in aufsteigender Reihenfolge der IDs ein. Dann ist auf jeder Array-Position eine Kiste, deren ID der Array-Position entspricht. Nun entfernt man Kiste 33 (geht mit deiner Lösung nicht) und fügt Kiste 75 ein. Das geht mit deiner Lösung auch nicht, obwohl an Position 33 ein Platz frei wäre.
 
Thema: 

2dimensionales array, Lagerverwaltung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben