Jump to content
Unity Insider Forum

Random Berechnung hilfe benötigt


Cyberpictures

Recommended Posts

Moin Moin, mal wieder Ich

mein Script läuft vom Grundprinzip her fast gut, ich habe nun noch 3 Probleme wobei ich etwas Hilfe gebrauchen könnte.  wie kann ich die folgend aufgestellten Probleme in angriff nehmen?

Problem 1:

Mein Script Rechnet korrekt im Bereich der Subtraktion, ich möchte aber verhindern das Negative Ergebnisse entstehen das soll heißen das die größere der beiden Zahlen vor dem Minus steht.

Problem 2:

Beim Dividieren ist es eben so das ich die größere Zahl vor dem geteilt Symbol haben möchte. 

Problem 3:

Auch wenn das Input Feld leer ist und man absenden klickt kommt in der Conosle das Ergebnis und das es richtig ist, jedoch wenn es Falsch ist kommt auch der Text "richtig gut und das Ergebnis"

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class rechentest : MonoBehaviour
{

    public Text text1;  //Zahl 1
    public Text text2;  //Zahl 2
    public Text zeichen; //Rechensymbol
    public Text dasErgebnis; //Ergebnis
    public InputField myergebins; //Ergebnis Eingabefeld zum Abgleich
    
    private int[] rand1; //definiert Zahl 1 
    private int[] rand2; //definiert Zahl 2
    private string[] zeichengen = {"+","-","*","/" }; //Array Liste für die Rechensymbole

    private void numbergen(int[] array)  //Zahlen generator

    {
        int merke = 0;

        for (int i = 0; i < array.Length; ++i)
        {
            for (int j = 0; j < array.Length - 1; ++j)
            {
                if (array[j] > array[j + 1])
                {
                    merke = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = merke;
                }
            }
        }
        for (int a = 0; a < array.Length; ++a) //Zahl 1
        {
            text2.text += " " + array[a];
        }
        for (int b = 0; b < array.Length; ++b) //Zahl 2
        {
            text2.text += " " + array[b];
        }
    }

    void Start()
    {
        rand1 = new int[1];
        rand2 = new int[1];

        text1.text = "";
        text2.text = "";
        zeichen.text = "";

        string myzeichengen = zeichengen[Random.Range(0, zeichengen.Length - 1)];  //gerneriert das rechensymbol aus der Liste oben

        for (int a = 0; a < 1; ++a) //zeigt random zahl 1 an welche oben generiert wird
        {
            rand1[a] = Random.Range(0, 10);
            text1.text += " " + rand1[a];
        }

        for (int b = 0; b < 1; ++b) //zeigt random zahl 2 an welche oben generiert wird
        {
            rand2[b] = Random.Range(0, 10);
            text2.text += " " + rand2[b];
        }
        foreach (string zeichengen in zeichengen)  //gibt das generierte Rechensymbol aus
        {
            zeichen.text = myzeichengen;
        }

    }    

    public void absenden() //Ergenis Prüfen bei Button Klick
    {

        int ergebnis;
        int num1 = int.Parse(text1.text);
        int num2 = int.Parse(text2.text);
                     
        // +
        if (zeichen.text == "+")
        {
            ergebnis = num1 + num2;
            Debug.Log("Richtig gut: " + ergebnis);
        }

        // -
        else if (zeichen.text == "-")
        {

            ergebnis = num1 - num2;
            Debug.Log("Richtig gut: " + ergebnis);
        }

        // *
        else if (zeichen.text == "*")
        {
            ergebnis = num1 * num2;
            Debug.Log("Richtig gut: " + ergebnis);
        }

        // :
        else if (zeichen.text == "/")
        {
            ergebnis = num1 / num2;
            Debug.Log("Richtig gut: " + ergebnis);
        }        
    }
}

Für die Optischen Veranschaulichung noch ein Bild vom derzeitigem Aufbau des Canvas.

 

Danke im Vorraus.

Bild zum Problem.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Cyberpictures changed the title to Random Berechnung hilfe benötigt

und wenn ich dein drittes Problem richtig verstanden habe hast du das Problem das immer "richtig" angezeigt wird 

eigentlich ist das auch kein wunder denn so weit ich das aus deinem code erkennen konnte vergleichst du nicht ein einziges mal das eingetippte Ergebnis mit dem berechneten.

da kann ich dir wieder eine if schleife empfehlen  

dein Code:

Am 26.2.2019 um 14:13 schrieb Cyberpictures:

if (zeichen.text == "+") { ergebnis = num1 + num2; Debug.Log("Richtig gut: " + ergebnis); }

richtig:

 if (zeichen.text == "+")
        {
            ergebnis = num1 + num2;
			if(ergebnis==myergebnis)
			{
				Debug.Log("Richtig gut: " + ergebnis);
			}
			else
			{
				Debug.Log("Leider Falsch");
			}
            
        }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Stunden schrieb frkx316:

Danke @ frkx316

das hat mir geholfen, jedoch finde ich nun meinen Fehler nicht beim Umwandeln vom string welchen das Inputfield ausgibt zu einem int 

Unity sagt:

FormatException: Input string was not in a correct format.
System.Number.StringToNumber (System.String str, System.Globalization.NumberStyles options, System.Number+NumberBuffer& number, System.Globalization.NumberFormatInfo info, System.Boolean parseDecimal) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
System.Number.ParseInt32 (System.String s, System.Globalization.NumberStyles style, System.Globalization.NumberFormatInfo info) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
System.Int32.Parse (System.String s) (at <d7ac571ca2d04b2f981d0d886fa067cf>:0)
RandomCalculator.absenden () (at Assets/Scripts/RandomCalculator.cs:100)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:66)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:108)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class RandomCalculator : MonoBehaviour
{

    public Text text1;  //Zahl 1
    public Text text2;  //Zahl 2
    public Text zeichen; //Rechensymbol
    public Text ergebnis; //Ergebnis

    public InputField input; //Ergebnis Eingabefeld zum Abgleich

    private int eingabe;
    private int ergebnisplus;
    private int ergebnisminus;
    private int ergebnismal;
    private int ergebnisgeteilt;

    private int[] rand1; //definiert Zahl 1 
    private int[] rand2; //definiert Zahl 2
    //private string[] zeichengen = {"+","-","*","/"}; //Array Liste für die Rechensymbole


    private string[] zeichengen = { "+"}; //Array Liste für die Rechensymbole zum Testen einzelner Rechnung



    private void numbergen(int[] array)  //Zahlen generator

    {
        int merke = 0;

        for (int i = 0; i < array.Length; ++i)
        {
            for (int j = 0; j < array.Length - 1; ++j)
            {
                if (array[j] > array[j + 1])
                {
                    merke = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = merke;
                }
            }
        }
        for (int a = 0; a < array.Length; ++a) //Zahl 1
        {
            text2.text += " " + array[a];
        }
        for (int b = 0; b < array.Length; ++b) //Zahl 2
        {
            text2.text += " " + array[b];
        }
    }

    public void Input(string dieeingabe)
    {
        input.text = "";
    }

    void Start()
    {
        rand1 = new int[1];
        rand2 = new int[1];
        
        text1.text = "";
        text2.text = "";
        zeichen.text = "";

        string myzeichengen = zeichengen[Random.Range(0, zeichengen.Length - 1)];  //gerneriert das rechensymbol aus der Liste oben

        input = GameObject.Find("InputFieldErgebnis").GetComponent<InputField>();

        for (int a = 0; a < 1; ++a) //zeigt random zahl 1 an welche oben generiert wird
        {
            rand1[a] = Random.Range(0, 10);
            text1.text += " " + rand1[a];
        }

        for (int b = 0; b < 1; ++b) //zeigt random zahl 2 an welche oben generiert wird
        {
            rand2[b] = Random.Range(0, 10);
            text2.text += " " + rand2[b];
        }
        foreach (string zeichengen in zeichengen)  //gibt das generierte Rechensymbol aus
        {
            zeichen.text = myzeichengen;
        }
    }


    public void absenden() //Ergenis Prüfen bei Button Klick
    {

        int num1 = int.Parse(text1.text);
        int num2 = int.Parse(text2.text);
        eingabe = int.Parse(input.text);

        // +
        if (zeichen.text == "+")
        {
            ergebnisplus = num1 + num2;
            Debug.Log(ergebnisplus + num1 + num2);
                if (eingabe == ergebnisplus)
                {
                    Debug.Log("Richtig gut: " + ergebnisplus);
                }
                else
                {
                    Debug.Log("Versuche es noch mal das war Falsch");
                }
        }

        // -
        else if (zeichen.text == "-")
        {
            if (num1 > num2)
            {
                ergebnisminus = num1 - num2;
                    if (eingabe == ergebnisminus)
                    {
                        Debug.Log("Richtig gut: " + ergebnisminus);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
            else
            {
                ergebnisminus = num2 - num1;
                    if (eingabe == ergebnisminus)
                    {
                        Debug.Log("Richtig gut: " + ergebnisminus);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
        }

        // *
        else if (zeichen.text == "*")
        {
            ergebnismal = num1 * num2;
                if (eingabe == ergebnismal)
                {
                    Debug.Log("Richtig gut: " + ergebnismal);
                }
                else
                {
                    Debug.Log("Versuche es noch mal das war Falsch");
                }
        }

        // :
        else if (zeichen.text == "/")
        {
            if (num1 > num2)
            {
                ergebnisgeteilt = num1 / num2;
                    if (eingabe == ergebnisgeteilt)
                    {
                        Debug.Log("Richtig gut: " + ergebnisgeteilt);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
            else
            {
                ergebnisgeteilt = num2 / num1;
                    if (eingabe == ergebnisgeteilt)
                    {
                        Debug.Log("Richtig gut: " + ergebnisgeteilt);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
        }

    }
}

Was übersehe ich ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Sascha:

Dann teile deine Lösung doch bitte mit der Nachwelt ;)

Ja klar gerne ich hoffe das Script ist auch ordentlich und verständlich geschrieben, Kritik sowie Verbesserung nehme ich gerne an. hier das fertige und laufende Script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class RandomCalculator : MonoBehaviour
{
    public Button senden;
    public Text text1;  //Zahl 1
    public Text text2;  //Zahl 2
    public Text zeichen; //Rechensymbol
    public Text ergebnis; //Ergebnis
    public InputField input; //Ergebnis Eingabefeld zum Abgleich

    private int eingabe;
    private int ergebnisplus;
    private int ergebnisminus;
    private int ergebnismal;
    private int ergebnisgeteilt;
    private int[] rand1; //definiert Zahl 1 
    private int[] rand2; //definiert Zahl 2
    private string[] zeichengen = {"+","-","*","/"}; //Array Liste für die Rechensymbole
    //private string[] zeichengen = {"+"}; //Array Liste für die Rechensymbole zum Testen einzelner Rechnung
    private string dieeingabe;

    private void numbergen(int[] array)  //Zahlen generator

    {
        int merke = 0;

        for (int i = 0; i < array.Length; ++i)
        {
            for (int j = 0; j < array.Length - 1; ++j)
            {
                if (array[j] > array[j + 1])
                {
                    merke = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = merke;
                }
            }
        }
        for (int a = 0; a < array.Length; ++a) //Zahl 1
        {
            text2.text += " " + array[a];
        }
        for (int b = 0; b < array.Length; ++b) //Zahl 2
        {
            text2.text += " " + array[b];
        }
    }
    

    void Start()
    {

        rand1 = new int[1];
        rand2 = new int[1];
        text1.text = "";
        text2.text = "";
        zeichen.text = "";
        ergebnis.text = input.text;
        string myzeichengen = zeichengen[Random.Range(0, zeichengen.Length - 1)];  //gerneriert das rechensymbol aus der Liste oben
        input = GameObject.Find("InputFieldErgebnis").GetComponent<InputField>();


        for (int a = 0; a < 1; ++a) //zeigt random zahl 1 an welche oben generiert wird
        {
            rand1[a] = Random.Range(0, 10);
            text1.text += " " + rand1[a];
        }

        for (int b = 0; b < 1; ++b) //zeigt random zahl 2 an welche oben generiert wird
        {
            rand2[b] = Random.Range(0, 10);
            text2.text += " " + rand2[b];
        }
        foreach (string zeichengen in zeichengen)  //gibt das generierte Rechensymbol aus
        {
            zeichen.text = myzeichengen;
        }
        senden.GetComponent<Button>().enabled = false;
    }

    public void active ()
    {
        senden.GetComponent<Button>().enabled= true;
    }

    public void absenden() //Ergenis Prüfen bei Button Klick
    {

        int num1 = int.Parse(text1.text);
        int num2 = int.Parse(text2.text);
        eingabe = int.Parse(input.text);

        // +
        if (zeichen.text == "+")
        {
            ergebnisplus = num1 + num2;
            Debug.Log(ergebnisplus + num1 + num2);
                if (eingabe == ergebnisplus)
                {
                    Debug.Log("Richtig gut: " + ergebnisplus);
                }
                else
                {
                    Debug.Log("Versuche es noch mal das war Falsch");
                }
        }

        // -
        else if (zeichen.text == "-")
        {
            if (num1 > num2)
            {
                ergebnisminus = num1 - num2;
                    if (eingabe == ergebnisminus)
                    {
                        Debug.Log("Richtig gut: " + ergebnisminus);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
            else
            {
                ergebnisminus = num2 - num1;
                    if (eingabe == ergebnisminus)
                    {
                        Debug.Log("Richtig gut: " + ergebnisminus);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
        }

        // *
        else if (zeichen.text == "*")
        {
            ergebnismal = num1 * num2;
                if (eingabe == ergebnismal)
                {
                    Debug.Log("Richtig gut: " + ergebnismal);
                }
                else
                {
                    Debug.Log("Versuche es noch mal das war Falsch");
                }
        }

        // :
        else if (zeichen.text == "/")
        {
            if (num1 > num2)
            {
                ergebnisgeteilt = num1 / num2;
                    if (eingabe == ergebnisgeteilt)
                    {
                        Debug.Log("Richtig gut: " + ergebnisgeteilt);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
            else
            {
                ergebnisgeteilt = num2 / num1;
                    if (eingabe == ergebnisgeteilt)
                    {
                        Debug.Log("Richtig gut: " + ergebnisgeteilt);
                    }
                    else
                    {
                        Debug.Log("Versuche es noch mal das war Falsch");
                    }
            }
        }

    }
}

Danke noch mal für die Hilfe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 44 Minuten schrieb Cyberpictures:

Kritik sowie Verbesserung nehme ich gerne an

Da dann:

  1. Warum benutzt du ein Arrays für rand1 und rand2, wenn du da sowieso nur jeweils einen Wert drin speicherst?
    Entsprechend sind Schleifen wie diese hier irgendwie überflüssig:
            for (int a = 0; a < 1; ++a) //zeigt random zahl 1 an welche oben generiert wird
            {
                rand1[a] = Random.Range(0, 10);
                text1.text += " " + rand1[a];
            }

    Denn wenn du von 0 bis 0 zählst heißt das, dass du einfach nur den Rumpf der Schleife konstant ein Mal ausführst. Wozu dann überhaupt eine Schleife?

  2. Diese beiden Schleifen sind exakt identisch:
            for (int a = 0; a < array.Length; ++a) //Zahl 1
            {
                text2.text += " " + array[a];
            }
            for (int b = 0; b < array.Length; ++b) //Zahl 2
            {
                text2.text += " " + array[b];
            }

    Was machen die also? Ist das Absicht, dass das gesamte Ding zweimal hintereinander angezeigt wird?

  3. Noch so eine Schleife:

            foreach (string zeichengen in zeichengen)  //gibt das generierte Rechensymbol aus
            {
                zeichen.text = myzeichengen;
            }

    Die ersetzt den Text von "zeichen" der Reihe nach mit allen Werten in "zeichengen". Am Ende hast du also das letzte Element des Arrays angezeigt. Warum dafür eine Schleife nehmen?

  4. Teils Felder, die lokale Variablen sein könnten. Das Feld "eingabe" benutzt du nirgendwo außer in der Methode "absenden". Mache lokale Variablen draus, so wie direkt darüber "num1" und "num2".

  5. Code-Duplizierung. Du hast die exakt gleiche Zeile

    Debug.Log("Versuche es noch mal das war Falsch");

    sechs Mal in deinem Code.
    Anstatt immer dasselbe Muster immer wieder im Code zu haben, fasse solche Sachen zusammen. In deinem Fall würde das so aussehen:

        public void absenden() //Ergenis Prüfen bei Button Klick
        {
    
            int num1 = int.Parse(text1.text);
            int num2 = int.Parse(text2.text);
            eingabe = int.Parse(input.text);
          
            int ergebnis;
          
            // Stelle sicher, dass num1 größer ist als num2
            if (num2 > num1)
            {
              // Tausche die Werte der beiden Variablen
              var buffer = num1;
              num1 = num2;
              num2 = buffer;
            }
          
            switch(zeichen.text)
            {
              case "+":
                ergebnis = num1 + num2;
                break;
              case "-":
                ergebnis = num1 - num2;
                break;
              case "*":
                ergebnis = num1 * num2;
                break;
              case "/":
                ergebnis = num1 / num2;
                break;
            }
          
            if (eingabe == ergebnis)
            {
              Debug.Log("Richtig gut: " + ergebnis);
            }
            else
            {
              Debug.Log("Versuche es noch mal das war Falsch");
            }
        }

    Damit ist die gesamte Methode abgefrühstückt, und wenn du dann mal merkst, dass du "Falsch" doch klein schreiben willst, musst du das nicht an sechs verschiedenen Stellen tun ;)
    Kurz zur Info: Das switch-case ist nichts anderes als eine Kurzform für Lauter if-Anweisungen hintereinander, die denselben Wert mit irgendetwas vergleichen. Damit nicht immer Sonderfälle bei Subtraktion und Division entstehen, stelle ich einfach vorher sicher, dass num1 immer die größere Zahl enthält.

  6. Allgemeines Zeug: (Teils!) Deutsche Namen, kryptische Bezeichnungen, usw. Nur lesbarer Code ist guter Code. Wenn man erstmal schauen muss, wo und wie eine Variable verwendet wird, damit man weiß, welchen Zweck sie erfüllt, dann ist das keine gute Sache.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Sascha das mit den Arrays kommt da ich eine Erklärung für ein Sortierscript mit mehreren verschiedenen Zahlen angeschaut hatte, da wurden die Arrays verwendet. Ehrlich gesagt bin ich im Eifer des Gefecht nicht drüber gestolpert das der Array bei nur einer Zahl Schwachsinn ist. 

Die Schleife für num1 & num2 habe ich doppelt da ich dachte ich muss für jede zahl das machen, muss auch gestehen wüsste gerade nicht wie ich das anders baue, die foreach schleife habe ich eingebaut, um das random ausgesucht Zeichen in das Text Feld zu implementieren im UI.

Den switch kannte ich bis eben noch nicht den hatte ich zuvor noch nicht kennengelernt, macht ja aber durchaus viel mehr Sinn als das was ich geschrieben habe.

Ja ich gebe dir recht ich sollt die Deutschen  Namen raus lassen um es überschaubarer zumachen.  Was genau meinst du mit den kryptischen Bezeichnung? 

 

Danke für deine Ehrlich und direkte Antwort ich werde das Script nach dein Ratschlägen noch mal neu aufbauen und schauen wie ich die zahlen Generierung besser mache. 

Ich freue mich das man als Anfänger hier eine solch tolle Unterstützung bekommt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Cyberpictures:

Was genau meinst du mit den kryptischen Bezeichnung

Variablennamen wie "rand1". Denn

vor 2 Stunden schrieb Sascha:

Wenn man erstmal schauen muss, wo und wie eine Variable verwendet wird, damit man weiß, welchen Zweck sie erfüllt, dann ist das keine gute Sache. 

Das Stichwort hier ist "sprechende Namen" bzw. "aussagekräftige Namen". Statt "rand1" ginge zum Beispiel "generatedNumber1" oder so.

vor einer Stunde schrieb Cyberpictures:

Den switch kannte ich bis eben noch nicht den hatte ich zuvor noch nicht kennengelernt, macht ja aber durchaus viel mehr Sinn als das was ich geschrieben habe.

Das switch-case ist hier nur das I-Tüpfelchen. Du kannst dasselbe theoretisch auch mit if-Abfragen machen. Der entscheidende Punkt an dieser Stelle ist, dass es immer eine Möglichkeit gibt, Code-Duplizierung zu verhindern. Wann immer du zweimal (fast) denselben Code hast, kannst du ihn immer so abändern, dass du ihn nur noch ein Mal hast.

vor einer Stunde schrieb Cyberpictures:

Danke für deine Ehrlich und direkte Antwort ich werde das Script nach dein Ratschlägen noch mal neu aufbauen und schauen wie ich die zahlen Generierung besser mache. 

Ich freue mich das man als Anfänger hier eine solch tolle Unterstützung bekommt.

Freut mich! Dann viel Erfolg weiterhin :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Sascha wärst du so lieb und sagst mir noch mal weiter was nun falsch ist? In visual bekomme ich keinen Fehler und in der Console auch nicht, jedoch kann man auf dem Bild sehen das da etwas schief geht ich bin etwas verwirrt. Habe gedacht ich habe das nun verstanden. Denn in den Texten in der UI kommt nun keine Zahl. Sry das ich mich gerade so dähmlich anstelle.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RandomCalculation : MonoBehaviour
{
    public Button send;
    public InputField input;
    public Text mathCharacter;
    public Text num1;
    public Text num2;
    public Text result;

    
    private string[] characters = { "+", "-", "*", "/" };

    private void Start()
    {

        int number1 = Random.Range(0, 10);
        int number2 = Random.Range(0, 10);

        string randCharacter = characters[Random.Range(0, characters.Length - 1)];

        num1.text += num1;
        num2.text += num2;
        mathCharacter.text += randCharacter;

        input = GameObject.Find("InputFieldErgebnis").GetComponent<InputField>();
        
        send.GetComponent<Button>().enabled = false;

    }

    public void active()
    {
        send.GetComponent<Button>().enabled = true;
    }

    public void calculation()
    {
        int count = int.Parse(result.text);
        int number1 = int.Parse(num1.text);
        int number2 = int.Parse(num2.text);
        int enter = int.Parse(input.text);

        // Stelle sicher, dass num1 größer ist als num2
        if (number2 > number1)
        {
            // Tausche die Werte der beiden Variablen
            var buffer = number1;
            number1 = number2;
            number2 = buffer;
        }

        //Das switch-case ist nichts anderes als eine Kurzform für Lauter if-Anweisungen hintereinander, die denselben Wert mit irgendetwas vergleichen.
        switch (mathCharacter.text)
        {
            case "+":
                count = number1 + number2;
                break;
            case "-":
                count = number1 - number2;
                break;
            case "*":
                count = number1 * number2;
                break;
            case "/":
                count = number1 / number2;
                break;
        }

        if (enter == count)
        {
            Debug.Log("Richtig gut: " + result);
        }
        else
        {
            Debug.Log("Versuche es noch mal das war Falsch");
        }
    }
}

 

Problem.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

        num1.text += num1;
        num2.text += num2;

Ich glaube, du wolltest da eigentlich etwas anderes hinschreiben. Darum sprechende Variablennamen: Deine Textkomponente sollte lieber "numberDisplay" heißen statt "num", dann weißt du gleich dass es sich hier nicht um die Zahl handelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke das klappt jetzt was aber irgendwie nicht klappt ist das schauen welche zahl größer ist um diese nach vorne zu schreiben. Ich bekomme trotzdem noch eine größere zahl am ende.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RandomCalculation : MonoBehaviour
{
    public Button send;
    public InputField input;
    public Text mathCharacter;
    public Text numberDisplay1;
    public Text numberDisplay2;
    public Text result;


    private string[] characters = { "+", "-", "*", "/" };

    private void Start()
    {

        int number1 = Random.Range(0, 10);
        int number2 = Random.Range(0, 10);

        string randCharacter = characters[Random.Range(0, characters.Length - 1)];

        numberDisplay1.text += number1;
        numberDisplay2.text += number2;
        mathCharacter.text += randCharacter;

        input = GameObject.Find("InputFieldErgebnis").GetComponent<InputField>();

        send.GetComponent<Button>().enabled = false;

    }

    public void active()
    {
        send.GetComponent<Button>().enabled = true;
    }

    public void calculation()
    {
        int count = int.Parse(result.text);
        int number1 = int.Parse(numberDisplay1.text);
        int number2 = int.Parse(numberDisplay2.text);
        int enter = int.Parse(input.text);

        // Stelle sicher, dass num1 größer ist als num2
        if (number2 > number1)
        {
            // Tausche die Werte der beiden Variablen
            var buffer = number1;
            number1 = number2;
            number2 = buffer;
        }

        //Das switch-case ist nichts anderes als eine Kurzform für Lauter if-Anweisungen hintereinander, die denselben Wert mit irgendetwas vergleichen.
        switch (mathCharacter.text)
        {
            case "+":
                count = number1 + number2;
                break;
            case "-":
                count = number1 - number2;
                break;
            case "*":
                count = number1 * number2;
                break;
            case "/":
                count = number1 / number2;
                break;
        }

        if (enter == count)
        {
            Debug.Log("Richtig gut: " + count);
        }
        else
        {
            Debug.Log("Versuche es noch mal das war Falsch");
        }
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

numberDisplay1.text += number1;
numberDisplay2.text += number2;

Erstmal: Warum hier += anstatt = ?

Mit += hängst du du bei Strings (und darum geht es ja hier) etwas hintendran.

Was die größere Zahl angeht: Bei der Anzeige (also vor diesen beiden Zeilen) schaust du gar nicht nach, welche die Größere ist, sondern tust sie einfach in die Felder. Aber anstatt das zu lösen, schauen wir uns noch etwas komisches an.

Du generierst die Zahlen, schreibst sie in ein Textfeld und liest sie dann wieder von da aus. Die Weg von Zahl zu Text zu Zahl ist einen Scritt zu lang. Baue dir lieber zwei Felder, in denen du die Werte speicherst.

private int number1;
private int number2;

und in Start:

number1 = Random.Range(0, 10);
number2 = Random.Range(0, 10);

// Stelle sicher, dass num1 größer ist als num2
if (number2 > number1)
{
  // Tausche die Werte der beiden Variablen
  var buffer = number1;
  number1 = number2;
  number2 = buffer;
}

// ...

numberDisplay1.text += number1;
numberDisplay2.text += number2;

und dann bei der Auswertung diese beiden Felder wieder verwenden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...