Jump to content
Unity Insider Forum

switch-Problem


peachplayer

Recommended Posts

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

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...