Home > Net >  How to add a second argument(Number) to a calculator program?
How to add a second argument(Number) to a calculator program?

Time:11-08

I'm working on a small calculator program in Unity. I only need the calculator to work with two numbers.

The feature I'm trying to implement: After inputting the math operator, It should display the second number in the third index.

The issue: Instead of Adding a second number, the first number is being overwritten if a different number is pressed on the keyboard.

Here's the script I've created:

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

public class Functions : MonoBehaviour
{
    // Global Variable to display text on top panel
    public Text panelText;

    // Create a number variable
    string num;
    string num1;
    string num2;
    string mOpr;
    string calNum;
    string cbutton;
    string opr;
    bool isFirstNum;

    // Start is called before the first frame update
    void Start()
    {
    }


    // A function with an int argument
    public void NumberInputOne(string num)
    {
        num1 = num;
        num2 = num;
        if (panelText.text.Length < 1)
        {
            Debug.Log(num1);
            panelText.text = num1;
            isFirstNum = false;
        }

        else if (panelText.text.Length > 1 && panelText.text.Length < 3)
        {
            num2 = num;
            Debug.Log(num2);
            panelText.text = num1   mOpr   num2;
        }
    }

    public void OperatorInput(string opr)
    {
        mOpr = opr;
        if (panelText.text.Length > 0 && panelText.text.Length < 2)
        {
            panelText.text = num1   mOpr;
        }
    }

    // public void NumberInputTwo(int num)
    //{
    //    ResNum2 = num;
    //    Debug.Log(ResNum2);
    //    if (panelText.text.Length > 1 && panelText.text.Length < 3)
    //    {
    //        panelText.text = ResNum1   opr   ResNum2;
    //    }
    // }

    public void RestartCal(string cButton)
    {
        panelText.text = "";
    }
}

I've also added a screen recording to capture the issue:

First number being overwritten

Do you have any suggestions?

Thank you

CodePudding user response:

use the NumberInputOne func like below;

public void NumberInputOne(string num)
{
    if (num1 is null)
    {
        Debug.Log(num1);
        panelText.text = num1;
        num1 = num
    }

    else
    {
        num2 = num;
        Debug.Log(num2);
        panelText.text = num1   mOpr   num2;
    }
}

btw i recommend that you review the sample calculation application codes. because apart from what you're asking, there are places you need to improve in general.

CodePudding user response:

This feels like a beginner programming exercise. But the right way to build a calculator involves programming concepts that you probably haven't been taught yet. Which makes this a poor choice as an assignment.

Personally I would build a calculator by defining a simple syntax tree to represent the formula being input. Including methods to display the formula and calculate the answer. For example;

public interface IValue
{
    int Calculate();
    string PrintValue();
}

public class Number : IValue
{
    public int? Value;
    public void AddDigit(int digit) => Value = (Value ?? 0) * 10   digit;
    public int Calculate() => Value ?? 0;
    public string PrintValue() => Value?.ToString();
}

public abstract class BinaryOperator : IValue
{
    public IValue Left;
    public IValue Right;

    public abstract int Operation(int left, int right);
    public abstract char Operator { get; }

    public int Calculate()
    {
        var left = Left.Calculate();
        var right = Right.Calculate();
        return Operation(left, right);
    }

    public string PrintValue() => $"{Left?.PrintValue()} {Operator} {Right?.PrintValue()}";
}

public class Addition : BinaryOperator
{
    public override char Operator => ' ';
    public override int Operation(int left, int right) => left   right;
}

// TODO define other operators

Then think about how each button should change the syntax tree.

// the entire formula
public IValue Root;
// the number currently being typed
public Number Input;

public void Display() {
    panelText.text = Root.PrintValue();
}

// start / clear
public void Start(){
    Root = Input = new Number(){
        Value = 0
    };
    Display();
}

public void Plus(){
    // left as an exercise for the reader
    Display();
}

public void Digit(int digit) {
    Input.AddDigit(digit);
    Display();
}

public void Calculate() {
    // left as an exercise for the reader
    Display();
}
  • Related