peachplayer Geschrieben 6. Mai 2019 Melden Share Geschrieben 6. Mai 2019 Hallo Leute Kann mir jemand helfen? Ich habe folgendes Problem: Wie kann ich den ertrag pro Kultur mit einer switch-Anweisung einer Variable zuweisen? Mit folgendem Code funktioniert das leider nicht richtig da nur die 1.switch-Anweisung durchlaufen wird. D. h. es kommt als Ergebnis immer der Wert 5000 für "Wintergerste" heraus! Dünger ZufallsEintrag() { float Fläche = 0.0f; float Erlös = 0.0f; dataXml = XElement.Load(GetPath2()); IEnumerable<XElement> data = dataXml.Elements(); foreach (XElement item in data) { string Kultur = item.Element("Kultur").Value; Fläche = float.Parse(item.Element("Fläche").Value); int index1 = dropdown1.value; string Parzellenname = dropdown1.options[index1].text; // Code der pro Parzellenname ausgeführt wird // parzelle enthält alle Einträge der jeweiligen Parzelle switch (Kultur) { case "Wintergerste": { ertrag = 5000.0f; break; } case "Winterweizen": { ertrag = 7000.0f; break; } case "Mais": { ertrag = 10000.0f; break; } } Debug.Log(ertrag); Dünger neuerEintrag = new Dünger(); int Nummer = k; int index2 = dropdown2.value; string Düngersorte = dropdown2.options[index2].text; float Menge = float.Parse(MengeEingabe.text); float Kosten = Menge * 0.01f * 80.0f; neuerEintrag.Nummer = Nummer; neuerEintrag.Parzellenname = Parzellenname; neuerEintrag.Menge = Menge; neuerEintrag.Kosten = Kosten; neuerEintrag.Fläche = Fläche; neuerEintrag.Erlös = Fläche* 0.5f *ertrag*0.01f; neuerEintrag.Düngersorte = Düngersorte; neuerEintrag.Kultur = Kultur; return neuerEintrag; } return null; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 6. Mai 2019 Melden Share Geschrieben 6. Mai 2019 Ich sehe da nicht so wirklich das Problem im Code... Wenn du jedes Mal 5000 rauskriegst, dann hast du vermutlich auch jedes Mal "Wintergerste". Alternativ ist das erste Element Wintergerste und die nachfolgenden Elemente entsprechen keiner der anderen Möglichkeiten in deinem switch-case. Ich würde erstmal mit Debug.Log deine Kultur ausgeben lassen, am besten direkt vor dem Debug.Log(ertrag). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 7. Mai 2019 Autor Melden Share Geschrieben 7. Mai 2019 Danke für die Antwort! Ich konnte das Problem "annähernd" lösen, indem ich statt die Variable 'Kultur' bei der switch-Anweisung, die Variable 'index1' abfrage! Das Ergebnis ist aber leider noch nicht ganz zufriedenstellend! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 7. Mai 2019 Melden Share Geschrieben 7. Mai 2019 Die Antwort ist gut! Was auf der Welt ist schon komplett zufriedenstellend?! Da es mit dem Index scheinbar besser geht, gehe ich davon aus, dass der String-Vergleich in deiner Switch-Anweisung nicht sauber funktioniert. Wenn du immer nur die 5000 als Wert siehst, kann es sein, dass die Variable einmal auf 5000 gesetzt wurde, als "Wintergerste" als String erkannt wurde. Es könnte sein, dass alle weiteren Strings keines deiner Vergleichsstrings entsprechen und somit ertrag auch nicht neu beschrieben wird. Somit bleibt der Wert 5000 erhalten. Es gibt aber bei Swtich-Case auch ein default ! Das solltest du nutzen, denn dann darüber kannst du etwas machen, wenn keine der vorigen cases eingetreten ist. Du kannst einen Defaultwert übergeben, oder, wie unten im Beispiel, einfach mal eine Warnung raus ballern! switch (Kultur){ case "Wintergerste": ertrag=5000.0f; break; case "Mais": ertrag=10000.0f; break; default: Debug.Log("Der String Kultur lautet >"+Kultur+"< und ist in meiner Abfrage nicht vorhanden!"); break; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 7. Mai 2019 Autor Melden Share Geschrieben 7. Mai 2019 danke für die Hinweise! Die .xml-Datei sieht wie folgt aus: <?xml version="1.0" encoding="UTF-8"?> <ArrayOfParzelle xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Parzelle> <Nummer>0</Nummer> <Parzellenname>parz1</Parzellenname> <Fläche>180</Fläche> <Kultur>Wintergerste</Kultur> <Menge>0</Menge> </Parzelle> <Parzelle> <Nummer>0</Nummer> <Parzellenname>parz2</Parzellenname> <Fläche>150</Fläche> <Kultur>Winterweizen</Kultur> <Menge>0</Menge> </Parzelle> <Parzelle> <Nummer>0</Nummer> <Parzellenname>parz3</Parzellenname> <Fläche>300</Fläche> <Kultur>Mais</Kultur> <Menge>0</Menge> </Parzelle> <Parzelle> <Nummer>0</Nummer> <Parzellenname>parz4</Parzellenname> <Fläche>80</Fläche> <Kultur>Mais</Kultur> <Menge>0</Menge> </Parzelle> <Parzelle> <Nummer>0</Nummer> <Parzellenname>parz5</Parzellenname> <Fläche>70</Fläche> <Kultur>Mais</Kultur> <Menge>0</Menge> </Parzelle> </ArrayOfParzelle> Ich vermute, dass einfach immer nur der 1. Eintrag ausgelesen wird und bei der switch-Anweisung auch nur in die 1. Abfrage mit "Wintergerste" gesprungen wird? Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 7. Mai 2019 Melden Share Geschrieben 7. Mai 2019 Glaub ich nicht. Probier es einfach mal mit dem default aus. Es bringt ja nichts irgendetwas zu vermuten. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 7. Mai 2019 Autor Melden Share Geschrieben 7. Mai 2019 die "default"-Anweisung bringt leider auch nichts! Wenn ich die xml.datei abändere und als 1. Eintrag z.B. "Mais" eingebe, dann kommt einfach überall der Ertrag für "Mais" heraus, d.h die anderen xml-Elemente werden gar nicht ausgelesen...wie könnte man das ändern? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 7. Mai 2019 Autor Melden Share Geschrieben 7. Mai 2019 wahrscheinlich liegt das Problem bei der "return"-Anweisung. Denn jedesmal wird ja die foreach-Schleife nach der "return"-Anweisung verlassen und sozusagen wieder von vorn begonnen...es wird also immer nur das 1. Element gelesen! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 7. Mai 2019 Melden Share Geschrieben 7. Mai 2019 Oh wow, völlig übersehen. @peachplayer hat natürlich absolut Recht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.