Weg-Suche-Problem rekursiv

El Hadji

Bekanntes 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?
e0b49s3vybwounyp2.png

Hier mein Code:
Code:
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
 

httpdigest

Top Contributor
Java:
public boolean hatLieferverbindungVon(Firma lieferant) {
  return lieferanten
    .stream()
    .anyMatch(l -> l.equals(lieferant)
                || l.hatLieferverbindungVon(lieferant));
}

Außerdem:
Java:
@Override
public boolean equals(Object obj) {
  return name.equals(((Firma) obj).name);
}
@Override
public int hashCode() {
  return name.hashCode();
}
 

El Hadji

Bekanntes 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
 

httpdigest

Top Contributor
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??
 

mihe7

Top Contributor
Nein leider ihr seid mich auch im neuen Jahr noch nicht ganz los^^
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?
 

El Hadji

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?

Ich steck direkt im Schneechaos, meine einzige Möglichkeit mit der Außenwelt Kontakt aufzunehmen ist über das Javaforum ;-)

Ok dachte ich mir schon, aber wenn ich eine Hashmap nehme. Kann ich ja in der rekursiven Methode keine Liste durchsuchen!
 

El Hadji

Bekanntes Mitglied
Code:
package supply;

import java.util.*;

public class Firma
{
    String name;
    HashMap <Firma, Double> liste = new HashMap<Firma, Double>();
     private ArrayList<Firma> lieferanten;
     /*
    private double umsatz;
    private Firma lieferant;
    private ArrayList<Firma> verbindung;
    private boolean ergebnis;
    */
  
    public Firma(String name)
    {
       this.name = name;
    }

  
    public String getName()
    {
       return name;
    }
   
    public boolean addLieferant(Firma lieferant, double umsatz)
    {
        if(lieferant.getName().equals(getName()))
        {
            return false;
        }
      
        if(liste.containsKey(lieferant))
        {
            return false;
        }
       
        else liste.put(lieferant, umsatz);
        return true;
    }
   
    public double getUmsatzanteilVon(Firma lieferant)
    {
        double gesamtumsatz = 0;
        Set<Firma> neu = liste.keySet();
       
        for(Firma f : neu)
        {
            gesamtumsatz += liste.get(f);
        }
      
      
        return ((liste.get(lieferant))/gesamtumsatz)*100;
     }
      
     /*
         public ArrayList<Firma> getLieferanten()
    {
        return lieferanten;
    }
    */
   @Override
public boolean equals(Object obj) {
  return name.equals(((Firma) obj).name);
}
@Override
public int hashCode() {
  return name.hashCode();
}
       
    public boolean hatLieferverbindungVon(Firma lieferant)
    {
        Set<Firma> lieferanten = liste.keySet();
        if(lieferant.getName().equals(this.getName()))
        {
            return false;
        }
  return lieferanten
   .stream()
    .anyMatch(l -> l.equals(lieferant)
                || l.hatLieferverbindungVon(lieferant));
}
    /*
    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;
    }
    */

So aber leider wirft das Testprogramm jetzt folgende Fehlermeldung:
Error in Test:
java.lang.StackOverflowError: java.util.stream.MatchOps$1MatchSink.<init>(MatchOps.java:84)
   
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Problem mit encoding und String Suche Java Basics - Anfänger-Themen 6
_SeiA_ Suche Schleife/Algorythmus für ein Problem Java Basics - Anfänger-Themen 3
L Suche Hilfe , Problem mit Vektoren und klassen Java Basics - Anfänger-Themen 21
I Reflection: Suche Feld + in Unterklassen Java Basics - Anfänger-Themen 7
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
M Suche Resteasy Example Java Basics - Anfänger-Themen 24
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
M binäre Suche im Intervall Java Basics - Anfänger-Themen 6
M binäre Suche Java Basics - Anfänger-Themen 4
H Suche Java3D 32 bit Java Basics - Anfänger-Themen 20
amelie123456 Lineare Suche / Binäre Suche Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
RudiRüssel Binäre Suche, unsortiert, lokales Maximum Java Basics - Anfänger-Themen 15
Y Suche von Studenten anhand Ihrer Eigenschaften. Java Basics - Anfänger-Themen 1
F Auf der Suche in π Java Basics - Anfänger-Themen 13
C Suche Nachhilfe in Java Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A suche dringend Hilfe!! Java Basics - Anfänger-Themen 6
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Suche free SVN Hosting Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
S Java Lineare-Suche Zeitmessung Java Basics - Anfänger-Themen 5
S Java Lineare Suche Java Basics - Anfänger-Themen 1
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
E Die richtige Suche in der API Java Basics - Anfänger-Themen 1
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
B Suche Programme mit Fehlern Java Basics - Anfänger-Themen 9
jaleda100 Component für Suche Java Basics - Anfänger-Themen 4
L Suche ein sampel Projekt Java Basics - Anfänger-Themen 2
P Suche Aufwandsgenerator (o-notation) Java Basics - Anfänger-Themen 1
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
M Suche hilfe bei Array Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
D Erste Schritte Suche Quelltext Java Basics - Anfänger-Themen 7
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Suche Hilfestellung Java Basics - Anfänger-Themen 10
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
J Suche die Emailadresse Java Basics - Anfänger-Themen 6
H Suche in Text und Markierung Java Basics - Anfänger-Themen 14
H Suche in einem Text Java Basics - Anfänger-Themen 17
H Erste Schritte Binäre Suche Java Basics - Anfänger-Themen 37
J Suche simples Beispiel für die EOFException Java Basics - Anfänger-Themen 1
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
L Binäre Suche Java Basics - Anfänger-Themen 2
L Linerae Suche in einem sortierten Array Java Basics - Anfänger-Themen 2
N Array, lineare Suche, binäre Suche, Programm bleibt unerwartet stehen... Java Basics - Anfänger-Themen 6
I Innerhalb einer Methode suchen und hinzufügen. Neues Objekt in Suche dann? Java Basics - Anfänger-Themen 8
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
J Binäre Suche eines Array Java Basics - Anfänger-Themen 5
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
M Benutzerdefinierte Suche in einem String - outofbounds Java Basics - Anfänger-Themen 7
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
B Binäre Suche in einem String Array Java Basics - Anfänger-Themen 10
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
M Best Practice Programmierstil Graphen-A*-Suche Java Basics - Anfänger-Themen 5
M Suche Hilfe bei sehr kleinen Quelltexten Java Basics - Anfänger-Themen 2
E Suche Klasse die eine Bedinung prüft und einen von zwei Auswahlwerten zurückgibt... Java Basics - Anfänger-Themen 6
D Erste Schritte suche hilfe für db-anbindung Java Basics - Anfänger-Themen 36
S Java Servlet - Suche Java Basics - Anfänger-Themen 1
P Hashing suche Java Basics - Anfänger-Themen 4
K Suche Hilfe bei einfachem Java Code ( Debuggen ) Java Basics - Anfänger-Themen 1
J Variablen Auf der suche nach einem Befehl Java Basics - Anfänger-Themen 2
M Binäre Suche Fehler überall =( Java Basics - Anfänger-Themen 2
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Binärbaum Suche Java Basics - Anfänger-Themen 5
U Vererbung Suche Hilfe anhand eines Bsp. Java Basics - Anfänger-Themen 1
L Suche Programmier-Projekt mit Anleitung Java Basics - Anfänger-Themen 3
A Suche Programmierer für Android App Java Basics - Anfänger-Themen 1
H Suche Vergleichstabelle für die Klassen String und StringBuilder Java Basics - Anfänger-Themen 1
X [SUCHE]Mitentwickler Java Basics - Anfänger-Themen 10
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
D Binare Suche Java Basics - Anfänger-Themen 1
C Erste Schritte Bereich angeben bzw Fehler Suche Java Basics - Anfänger-Themen 6
L Suche in dreidimensionalen Arrays Java Basics - Anfänger-Themen 3
P Lineare Suche im Array Java Basics - Anfänger-Themen 5
X verschachtelte suche Java Basics - Anfänger-Themen 8
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
S Erste Schritte Suche nach einem guten JAVA-Buch (Definition im Thread) Java Basics - Anfänger-Themen 6
G suche den Begriff & wie programmiere ich sowas (ich ändere den Titel dann) Java Basics - Anfänger-Themen 2
M suche/brauche Links über rein GUI Beispielprogramme Java Basics - Anfänger-Themen 4
I Suche Component welches Map ähnelt Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
G Erste Schritte Suche nach Zeichenkette Java Basics - Anfänger-Themen 26
steffomio Suche brauchbares I18N Lib Java Basics - Anfänger-Themen 4
J Suche Tipps zum erstellen von Algorithmen Java Basics - Anfänger-Themen 5
D Artikel-Suche implementieren Java Basics - Anfänger-Themen 7
S suche nach eclipse plug-in Java Basics - Anfänger-Themen 3
W Compiler-Fehler Binäre Suche Java Basics - Anfänger-Themen 2
R Suche Regex Ausdruck für HTML Java Basics - Anfänger-Themen 11
K Suche geeignete Code-Beispiele Java Basics - Anfänger-Themen 4
P Suche Java Programme mit gutem/anfängertauglichem Quellcode Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben