nur das erste Element mit iterator ausgeben

Diskutiere nur das erste Element mit iterator ausgeben im Java Basics - Anfänger-Themen Bereich.
F

Funkeyfreak

Hey,

ich habe derzeit die Aufgabe diese beiden Lagerpläne (https://gyazo.com/9aa8d9106d384e42e54ce91f430ad082 https://gyazo.com/4eb32d5cff15cdd9e405a8f0b16c4410 ) in zweidimensionale Arrays zu packen und mit dem Skalarprodukt den kürzesten Weg zu finden.

Kürzeste Weg bedeutet z.B.: Anhand der Areanummer die man selbst vergaben darf und der Ebenenummer kann man herausfinden, in welches Regalfach man ein Produkt einlagern kann (check). Jedoch muss man nun den kürzesten Weg zur Einlagerung bestimmen, d.h. die Artikel werden später auf einen Wagen geladen und eingelagert -> dort soll der Weg möglichst kurz sein (d.h. bei der Einlagerung schon schlau einlagern). Jedoch habe ich keine Ahnung wie ich mit der Areanummer, die ich frei vergeben kann, den kürzesten Weg mithilfe eines oder mehrere zweidimensionalen Arrays berechnen kann.

Wenn ihr ein Tipp oder mir mitteilen könntet wie ihr das Problem angehen würdet, wäre das echt Klasse.
 
mihe7

mihe7

Sollst Du die kompletten Pläne abbilden? Mir ist auch noch nicht ganz klar, was ein zweidimensionales Array hier bringen soll (gut, Ebene und Regale wäre denkbar) und noch weniger, was Deine Überschrift mit dem Thema zu tun hat....
 
F

Funkeyfreak

Sorry, ich hatte Probleme mit iterator und wollte ein Thread hier erstellen, jedoch habe ich dann eine Lösung gefunden und vergessen als ich den Text gelöscht habe und diesen Text geschrieben habe, die Überschrift zu ändern

Ja ich soll die kompletten Pläne abbilden, also alle Regale/Paletten

Ja dachte daran in dem zweidimensionalen array den Regalen eine Areanummer zuzuweisen und wo kein Regal steht einfach eine 0 zuweisen. Und dann durch eine rekursive methode zu gucken ob von meiner aktuellen position in der Nachbarschaft ein Regal steht wo mein aktueller artikel rein passt.

Aber das eigentliche Problem was ich derzeit habe ist, dass meine aktuelle position sich immer ändern wird, da wenn ich ein regal einlagert habe, dann ist dieses regal meine aktuelle position und von dort muss ich den nächsten kürzesten weg zum nächsten freien Fach finden.

Code mäßig habe ich dass mal entworfen:

Code:
public class ZentralesVerteilungssystem {
  
    private int Ebenenummer;
    private int Regalnummer; //Regalnummer = Area in der sie sich befinden -> wird beim array hinzugefügt
  
    DBConnect connect = new DBConnect();
  
    int kuerzesterWeg (int Regalnummer, int Ebenenummer, int VE_Limit) {
        int z=0;
        int y=1;
        int fach=-1;
        int [][] Erdgeschoss = {
                {1,  2,  3,   4,  5,  6,   7,  8},//0 steht nichts -> zahl = Areanummer
                {9,  10,  11, 12, 13,  14,  0,  16},
                {17, 18, 19, 20,  21, 22, 0, 24},
                {25,  26,  27, 0,  29, 0,   31,  0},
                {33,  0,  35, 0,  37,  38,   39,  0},
                };
      
        int [][] Obergeschoss = {
            {1,  2,  3,   4,  0,  0,   0,  0},//0 steht nichts -> zahl = Areanummer
            {9,  10,  11, 12,  13,  0,   0,  0}, //13=Treppe - Startpunkt
            {17, 18, 19, 20,  21, 22, 23, 24},
            {25,  26,  27, 28,  29, 30,   31,  32},
            {33,  34,  35, 36,  37,  38,   39,  40},
            };
      
        try {
            while (connect.getFaecher(Regalnummer, Ebenenummer, VE_Limit)==-1) {
                if (z%4==0 ) { // -> z wird solange hochgezählt bis ein Fach gefunden das frei ist
                    y=1;    //start bei regalnummer 1
                }
                if (z%4==1) {
                    y=-1;     
                }
                if (z%4==2) { //dauerschleife ->
                    y=8;
                }
                if (z%4==3) {
                    y=-8;
                }
                if (z%4==4) {
                    y=7;
                }
                if (z%4==5) {
                    y=-7;
                }
                if (z%4==6) {
                    y=9;
                }
                if (z%4==7) {
                    y=-9;
                }
                z++;
            kuerzesterWeg (Regalnummer+y,  Ebenenummer,  VE_Limit);
            }
            fach = connect.getFaecher(Regalnummer,  Ebenenummer,  VE_Limit);
            }
      
        catch (Exception e) {
            e.printStackTrace();
        }
        return fach;
      
    }
Code:
public int getFaecher(int Regalnummer, int Ebenenummer, double VEArtikel) {
        int r=-1;
        try {
            String query = "Select VE_Limit, Artikel_ID from regalfach where Regalnummer=? And Ebenenummer =?";
          
            PreparedStatement stmt = con.prepareStatement(query);
            stmt.setInt(1, Regalnummer);
            stmt.setInt (2,Ebenenummer);
            rs = stmt.executeQuery();
          
            while (rs.next()) {
                if(VEArtikel <= rs.getDouble("VE_Limit"))
                {
                    return rs.getInt("Artikel_ID"); 
                }
                }
            }
              
      
        catch(Exception e) {
            System.out.println(e);
        }
        return r;
    }

Jedoch sieht man schnell dass ich probleme mit der rekursion habe und ich derzeit noch keinen wirklichen Lösungsansatz habe.

-> Die idee hinter den +9 -9 etc. ist dass man alle Nachbarn durchguckt und man dies am besten tun kann wenn man die Regalnummer (==Areanummer) anpasst und dort immer guckt.

https://gyazo.com/86bc6042d0781ebcdc0530507435820e -> hier ein Bsp wie ich es aufgeteilt habe
 
Zuletzt bearbeitet:
F

Funkeyfreak

Ich will um mich herum gucken ob es dort Regale gibt wo der Artikel reinpasst und wenn es dort keinen gibt, dann nehme ich einen neuen punkt und gucke erneut oben, unten, rechts, links, querrechtsoben, querlinksoben, querrechtsunten, querlinksunten.

Wie ich dass mit Rekursion so hinbekomme dass ich die richtigen Felder auswähle und somit nicht die Felder überprüfe die weiter weg sind, da bin ich grad dran. Da habe ich mein Problem. Ich weiß nicht wie ich dass hinbekommen soll...

Eine andere Methode als die Rekursion fällt mir auch nicht ein
 
L

lennero

Ich will um mich herum gucken ob es dort Regale gibt wo der Artikel reinpasst und wenn es dort keinen gibt, dann nehme ich einen neuen punkt und gucke erneut oben, unten, rechts, links, querrechtsoben, querlinksoben, querrechtsunten, querlinksunten.
Bin kein Profi aber das hört sich stark nach Tiefensuche an.


Hier mal ein Beispiel:
Java:
public static void dfs(int n, int m, char[][] islands, boolean[][] visited)
    {
        //mark current position as visited
        visited[n][m] = true;

        //check right
        if(m < (islands[0].length - 1) && islands[n][m + 1] == '1' && !visited[n][m + 1])
        {
            dfs(n, m + 1, islands, visited);
        }

        //check left
        if(m > 0 && islands[n][m - 1] == '1' && !visited[n][m - 1])
        {
            dfs(n, m - 1, islands, visited);
        }

        //check above
        if(n > 0 && islands[n - 1][m] == '1' && !visited[n - 1][m])
        {
            dfs(n - 1, m, islands, visited);
        }

        //check below
        if(n < (islands.length - 1) && islands[n + 1][m] == '1' && !visited[n + 1][m])
        {
            dfs(n + 1, m, islands, visited);
        }
    }
Hierbei ist das char array ein Feld welches entweder aus nullen oder einsen besteht. Die Methode sucht also bis eine '1' gefunden wird, danach wird jede Richtung nach weiteren einsen durchsucht.

Das ist natürlich nur ein Beispiel und passt nicht genau zu deiner Aufgabe.
 
Thema: 

nur das erste Element mit iterator ausgeben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben