Weg-Suche-Problem rekursiv

Diskutiere Weg-Suche-Problem rekursiv im Java Basics - Anfänger-Themen Forum; Servus Community, Nein leider ihr seid mich auch im neuen Jahr noch nicht ganz los^^ Ich habe ein Beispiel mit 1 rekursiven Methode, die alle...

  1. El Hadji
    El Hadji Mitglied
    Servus Community,
    Nein leider ihr seid mich auch im neuen Jahr noch nicht ganz los^^
    Ich habe ein Beispiel mit 1 rekursiven Methode, die alle indirekten Verbindungen ausprobieren soll. Wenn es eine gibt true zurück geben und wenn nicht false. Leider klappt dass bei mir nicht so ganz, hättet ihr eine Idee woran das liegen kann?
    [​IMG]
    Hier mein Code:
    Code (Text):
    package supply;
    import java.util.*;

    public class Firma
    {
        private String name;
        private ArrayList<Firma> lieferanten;
        private double umsatz;
        private Firma lieferant;
        private ArrayList<Firma> verbindung;
        private boolean ergebnis;
       
        public Firma(String name)
        {
            this.name=name;
            this.lieferanten=new ArrayList<Firma>();
        }
       
        public String getName()
        {
            return name;
        }
       
        public boolean addLieferant(Firma lieferant, double umsatz)
        {
            if(!lieferanten.contains(lieferant))
            {
                lieferanten.add(lieferant);
                lieferant.umsatz=umsatz;
                return true;
            }
            return false;
        }
       
        public ArrayList<Firma> getLieferanten()
        {
            return lieferanten;
        }
       
        public double getUmsatzanteilVon(Firma lieferant)
        {
            double gesamtumsatz = 0;
            for (int i = 0; i<lieferanten.size(); i++)
            {
               gesamtumsatz += lieferanten.get(i).umsatz;
            }
           
            if(!lieferanten.contains(lieferant))
            {
                return 0;
            }
           
            else return (lieferant.umsatz/gesamtumsatz)*100;
        }
       
        public boolean hatLieferverbindungVon(Firma lieferant)
        {
            this.verbindung=new ArrayList<Firma>();
            this.ergebnis=false;
            return findeVerb(lieferant,this,verbindung);
        }
       
        public boolean findeVerb(Firma lieferant,Firma start,ArrayList<Firma> verbindung)
        {
            if(start == lieferant)
            {
                return true;
            }
           
            for(Firma fa:start.getLieferanten())
            {
                if(!verbindung.contains(fa))
                {
                    verbindung.add(fa);
                    return findeVerb(lieferant,fa,verbindung);
                }
            }
            return false;
        }
    }
    Normalerweise hätte ich ja ein Hashset statt einer ArrayList für die Lieferanten genommen, aber dann habe ich bei der rekursiven Methode noch weniger Plan.
    Mit freundlichen Grüßen
    El Hadji
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
  3. httpdigest
    httpdigest Bekanntes Mitglied
    Code (Java):
    public boolean hatLieferverbindungVon(Firma lieferant) {
      return lieferanten
        .stream()
        .anyMatch(l -> l.equals(lieferant)
                    || l.hatLieferverbindungVon(lieferant));
    }
    Außerdem:
    Code (Java):
    @Override
    public boolean equals(Object obj) {
      return name.equals(((Firma) obj).name);
    }
    @Override
    public int hashCode() {
      return name.hashCode();
    }
     
  4. El Hadji
    El Hadji Mitglied
    Sorry für die blöde Frage, aber was ist stream() und anyMatch ?
     
  5. httpdigest
    httpdigest Bekanntes Mitglied
  6. El Hadji
    El Hadji Mitglied
    Ok vielen Dank, aber leider funktioniert das auch nicht bei allen Fällen -.-

    Falsches Ergebnis (true) bei addLieferant FNR-5 zu Firma
    FNR-5 wird beliefert von:
    FNR-2
    FNR-3 wird beliefert von:
    FNR-1
    FNR-4 wird beliefert von:
    FNR-5
    FNR-2
     
  7. httpdigest
    httpdigest Bekanntes Mitglied
    Was soll mir diese Ausgabe sagen? Welche Firmen hast du wie genau angelegt, welche Lieferanten haben sie und was genau versuchst du da, bzw. rufst du auf??
     
  8. El Hadji
    El Hadji Mitglied
    Das Testprogramm wirft diese Fehlermeldungen aus
     
  9. El Hadji
    El Hadji Mitglied
    Beim Selbstständigen Testen finde ich auch keine Fehler
     
  10. El Hadji
    El Hadji Mitglied
    ok scheinbar verlangt das Testprogramm dass wenn der Lieferant selber abgefragt ist und auch indirekt selber ein Lieferant ist, false zurückgibt
     
  11. mihe7
    mihe7 Bekanntes Mitglied
    Puh, 2019 fängt ja schon gut an: Schneechaos im Süden, @El Hadji und andere Naturkatastrophen :rolleyes::p

    Beim Rekursionsguru (@httpdigest) bist Du gut aufgehoben. Daher nur eine Randbemerkung: Deine Methode public boolean addLieferant(Firma lieferant, double umsatz) ist falsch implementiert; dort änderst Du den Umsatz des Lieferanten. Was passiert, wenn ein Lieferant zwei Firmen beliefert?
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Weg-Suche-Problem rekursiv - Ähnliche Themen

Enum Array Rekursiv abarbeiten
Enum Array Rekursiv abarbeiten im Forum Java Basics - Anfänger-Themen
Primzahl rekursiv mit einem Wert ohne i, wie?
Primzahl rekursiv mit einem Wert ohne i, wie? im Forum Java Basics - Anfänger-Themen
Quersumme rekursive Methode
Quersumme rekursive Methode im Forum Java Basics - Anfänger-Themen
Potenz Negativ (rekursiv)
Potenz Negativ (rekursiv) im Forum Java Basics - Anfänger-Themen
Rekursiv aufrufen
Rekursiv aufrufen im Forum Java Basics - Anfänger-Themen
Thema: Weg-Suche-Problem rekursiv