Methoden RekursiveMethode

sgtcoopa

Mitglied
public static int flushPipesRec(" ? " ){
if (start.containsWater() == true ){
return;
}else{

c.flushPipe(pipes);
}

WaterPipe[] nb = start.getNeighbors();
for (int i = 0; i < nb.length; i++) {
flushPipesRec(nb);
}
}

Bildschirmfoto 2022-01-29 um 17.23.58.png
Schaffe es nicht das er rekursiv durchgeht und immer die nächste Pipe checkt weiß nicht genau wie ich (nb); implementiere damit die schleife immer neu läuft
 

mihe7

Top Contributor
Bitte Code-Tags verwenden (in der Toolbar des Editors auf </> klicken, dann Code dort einfügen).

Code:
Algorithmus befuelleNetzwerk(Rohr rohr) {
    Falls rohr noch nicht befüllt {
        Befülle rohr
        Für jedes an rohr angeschlossene Rohr x wiederhole {
            befuelleNetzwerk(x)
        }
    }
}
 

sgtcoopa

Mitglied
Java:
public static void flushAllPipes(Controller c) {
     return fillPipes(c, c.getStartWaterPipe()); }
  
     public static void fillPipes(Controller c, WaterPipe waterPipe) {
         if (wp.containsWater() == false) {
             c.flushpipe(wp);   
             while (wp.getNeighbors.containsWater == false) {
             c.flushpipe(wp.getNeighbors()) ;   
             }
         } 
     }
  }
wie kann ich jetzt hier einen Parameter wp schreiben den ich dann am Ende immer ändere
 

mihe7

Top Contributor
Du brauchst eine Schleife und must die Methode fillPipes rekursiv aufrufen:
Java:
for (WaterPipe nextPipe : wp.getNeightbors()) { // Für jedes an wp angeschlossene Rohr nextPipe wiederhole ...
    c.fillPipes(c, nextPipe); // befuelle das Netzwerk von nextPipe
}
 

sgtcoopa

Mitglied
Java:
public class Piping {
    public static void main(String[] args){
        Controller con = new Controller(args);
        con.setSpeed(600);
        Piping.flushAllPipes(con);
    
    }
    
public static void flushAllPipes(Controller c) {
    return fillPipes(c, c.getStartWaterPipe()); }
  
     public static void fillPipes(Controller c, WaterPipe waterPipe) {
         if (waterPipe.containsWater() == false) {
             c.flushPipe(waterPipe);   
              
             for (WaterPipe nextPipe : waterPipe.getNeighbors()) {
             fillPipes(c, nextPipe);
            
             }
         } 
     }
  }

Hab noch ein Problem getNeighbors gibt nämlich ein Array zurück (für Kreuzungen) z.B und dieses Array macht mir immer Probleme
 

sgtcoopa

Mitglied
Java:
c.flushPipe(waterPipe);

Eine Frage hätte ich noch ist es möglich den flushPipe befehl zu zählen umso z.B Wasser Einheiten einzuführen?
 
G

Gelöschtes Mitglied 65838

Gast
du kannst nicht den Methoden aufruf ansich zählen aber du kannst in der Methode einen Zähler einführen
 

sgtcoopa

Mitglied
Java:
public static void flushAllPipes(Controller c) {
     fillPipes(c, c.getStartWaterPipe(), 60); }
  
     public static void fillPipes(Controller c, WaterPipe waterPipe, int waterSupply) {
         if (waterPipe.containsWater() == false) {
             c.flushPipe(waterPipe); 
             waterSupply--;
             for (WaterPipe nextPipe : waterPipe.getNeighbors()) {
             fillPipes(c, nextPipe, waterSupply);
            
             }
         } 
     System.out.println("Wassereinheiten:" + " " + waterSupply );
     }

waterSupply geht am Ende wieder hoch also von 60 bis 52 und dann auf einmal wieder bis 58, wieß jemand wieso
 

sgtcoopa

Mitglied
Java:
public static void flushAllPipes(Controller c, int waterSupply) {
     fillPipes(c, c.getStartWaterPipe(), waterSupply); }
    
     private static int fillPipes(Controller c, WaterPipe waterPipe, int waterSupply) {
         if (waterPipe.containsWater() == false && waterSupply > 0) {
             c.flushPipe(waterPipe); 
             waterSupply--;
             for (WaterPipe nextPipe : waterPipe.getNeighbors()) {
             fillPipes(c, nextPipe, waterSupply);
            
             }
          System.out.println("Wassereinheiten:" + " " + waterSupply);
         }
        return waterSupply;
     }
  }

weiß nicht wie ich oben genanntes Problem lösen kann
 

mihe7

Top Contributor
Schieb mal Zeile 12 vor 7 und weise in der Schleife das Ergebnis des Aufrufs fillPipes der Variablen waterSupply zu.
 

Neue Themen


Oben