Jump to content
Unity Insider Forum
Sign in to follow this  
peachplayer

ein 0-Wert wird ausgegeben

Recommended Posts

Hallo Leute

Weiss jemand wieso ich beim folgenden Code einen Null-Wert bei der Spalte Erlös erhalte? Die anderen Spalten beim Output haben alle keine Null-Werte.

Gruss, peachplayer

image.thumb.png.f1c0a688071ec91102ab89e9d2f4f0a1.png

  void ListeAnzeigen()
    {
        string NummerAusgabe = "";
        string ParzellennameAusgabe = "";
        string KostenAusgabe = "";
        float Kostentotal = 0.0f;
        float Kostentotal_pf = 0.0f;
        float Kostensumme = 0.0f;
        float ErlösAusgabe_total = 0.0f;
        float parzellenSumme1 = 0.0f;
        int i = 0;

        int index1 = dropdown1.value;

        var parzellen2 = liste1.GroupBy(item => item.Datum.Year);
        foreach (var parzelle1 in parzellen2)
        {
            string Jahr_auswahl = parzelle1.Key.ToString();
            if (dropdown1.options[index1].text == Jahr_auswahl)
            {



                var parzellen1 = liste1.GroupBy(item => item.GetParzellenname());
                foreach (var parzelle in parzellen1)
                {
                    // Code der pro Parzellenname ausgeführt wird
                    // parzelle enthält alle Einträge der jeweiligen Parzelle
                    //string Jahr_auswahl = liste[i].Datum.Year.ToString();

                 
                        string parzellenName = parzelle.Key;
                       


                        int Nummer = parzelle.Sum(item => item.Nummer);
                        NummerAusgabe += parzelle.Sum(item => item.Nummer) + "\n";
                      
                        ParzellennameAusgabe += parzellenName + "\n";
                        ParzellennameAnzeige.text = ParzellennameAusgabe;
                        float parzellenSumme = parzelle.Sum(item => Mathf.Round(item.Kostensumme() * 1.00f));
                  
                        
                        IEnumerable<Kosten> result = parzelle.Where(c => c.Fläche > 0 && c.Erlös >0);
                        IEnumerable<Kosten> result2 = parzelle.Where(c => c.Erlös > 0 && c.Fläche >0 && c.Kost_d >0);
                        //float Fläche2 = parzelle.Sum(item => Mathf.Round(item.Fläche * 1 / Nummer));
                        float Summe1 = parzelle.Sum(item => Mathf.Round(item.Erlös));

                        KostenAusgabe += parzellenSumme + "\n";
                        KostenAnzeige.text = KostenAusgabe;
                        Kostentotal += parzellenSumme;
                        //Erlös = parzelle.Sum(item => Mathf.Round(item.Erlös * 0.50f));
                        var result_erlös = result2.GroupBy(item1 => item1.Erlös);
                        foreach (var item in result_erlös)
                        {
                            if (item.Key > 0)
                            {
                                Erlös = item.Key;
                                ErlösAusgabe += Erlös + "\n";

                                ErlösAnzeige.text = ErlösAusgabe;
                                ErlösAusgabe_total += Erlös;

                                DBAusgabe += Erlös - parzellenSumme + "\n";
                            }
                        }         
                        var result_fläche = result.GroupBy(item1 => item1.Fläche);
                        foreach (var item in result_fläche)
                        {
                            DBAusgabe_ha += Mathf.Round((Erlös - parzellenSumme) * 100.0f / (item.Key)) + "\n";
                          
                            DBAnzeige_einzeln_proha.text = DBAusgabe_ha;
                            DBAnzeige_einzeln.text = DBAusgabe;
                    
                        }
                
                    }

                    //StartCoroutine(SaveData(parzellenName, Erlös, parzellenSumme, (Erlös - parzellenSumme)));
                }
            }

        
        //totaleKostenAnzeige.text = Kostensumme.ToString();
        if (ParzellennameAusgabe != "" && Erlös >0)
        {
            NummerAnzeige.text = NummerAusgabe;
            totaleKostenAnzeige.text = "Totale Kosten = " + (Kostentotal);
            PlayerPrefs.SetFloat("Kosten_total", Kostentotal);

            //totaleKostenAnzeige.text = "Totale Kosten = " + Kostentotal;





            DBAnzeige.text = "DB total = " + (ErlösAusgabe_total - Kostentotal).ToString();
            totalerErlösAnzeige.text = "Totaler Erlös = " + ErlösAusgabe_total;

            Kassenbestand = (ErlösAusgabe_total - Kostentotal) + PlayerPrefs.GetFloat("Kassenbestand");
            PlayerPrefs.SetFloat("Kassenbestand", Kassenbestand);
        }
    }

 

Share this post


Link to post
Share on other sites

Wie du auf deinen Screenshot sehen kannst, steht unten in der Konsolenleiste eine Fehlermeldung. (NullReferenceException)
Solange solch ein Fehler ansteht, ob nun für deine Berechnung bzw. Anzeige wichtig oder nicht, brauchen wir gar nicht im Code nach dieser einen Null zu suchen.
Behebe erst einmal den Fehler.

Share this post


Link to post
Share on other sites

Danke für den Hinweis! In folgender Zeile bekomme ich die Fehlermeldung:

   if (dropdown1.options[index1].text == Jahr_auswahl)
            

und zwar einen Index-Out of Range Fehler. Leider weiss ich nicht wie ich das korrigieren kann.

Share this post


Link to post
Share on other sites

Tja, ich gehe stark davon aus, dass dropdown1 keine Referenz zu irgendeiner Dropdown Komponente hat.
Und wenn die dropdown1 Variable leer ist, bekommst du eine NullReferenceException, sobald du versuchst irgend etwas damit zu machen.
Ist ja auch klar. Ein Dropdown ist wie ein Buch mit mehreren nummerierten Seiten. Du weisst wie man umblättert und du weisst wie man auf der gewünschten Seite etwas liest. Aber wenn du kein Buch in der Hand hast, kannst du nicht umblättern und auch nicht lesen. Und genau das sagt dir das Programm, mit der NullReferenceException.
Es könnte dir jetzt etwas aus einer Seite vorlesen, kann es aber nicht, weil das vermutete Buch nicht da ist.
Du wunderst dich vielleicht, dass es nicht schon eine Fehlermeldung gab, also du den Index1 mit einem Wert gefüllt hast.

int index1 = dropdown1.value;

Ja, da wirst du wahrscheinlich einen Defaultwert bekommen haben und das wird die 0 gewesen sein. Denn dropdown1 ist ja eine Variable vom Typ Dropdown und da ist schon klar, wie ich so einen Typ abfragen und bearbeiten kann. Du kennst also das Grundgerüst bzw. die Blaupause eine Dropdownelementes. Diese Variable hat aber leider keinen Verweis auf ein echtes Dropdownelement, was dann ja irgendeinen Valuewert haben kann, abhängig von der Anzahl der Elemente da drin.
Hast du z.B. 3 Dropdownelemente da drin, dann könnte value 0, 1 oder 2 sein.

Weiter unten willst du jetzt Informationen über den Text am entsprechenden Index abfragen.  Ja und das geht nun nicht, denn die leere Dropdown Variable hat keine Infos. Dein Index ist also ausserhalb des Bereichs, denn es gibt keinen Bereich.

Du musst unbedingt lernen, was die einzelnen Fehlermeldungen bedeuten, damit du selbstständig erkennst, wieso das jetzt ein Fehler ist und wie bzw. wo du ihn beheben kannst.
Sobald du eine Fehlermeldung siehst (rot), bereinige sie! Auch wenn der Fehler evtl. in einem ganz anderen Script zu finden ist oder das Programm augenscheinlich weiter arbeitet.
Erst wenn du keine Fehlermeldung mehr hast und dann immer noch ein Wert falsch ist, wie bei dir die 0, kann man von einem Logikproblem ausgehen.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...