I trying to create calculator here, however it can only calculate 1 digit number. When I try 2 digits number it’s calculate wrong. For example, I tried 11+1 but the answer is 2.
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Calculator : MonoBehaviour
{
[SerializeField]
Text inputField;
string inputString;
int[] number = new int[2];
string operatorSymbol;
int i = 0;
int result;
bool displayerResults = false;
public void ButtonPressed()
{
if(displayerResults == true)
{
inputField.text = "";
inputString = "";
displayerResults = false;
}
string buttonValue = EventSystem.current.currentSelectedGameObject.name;
inputString += buttonValue;
int arg;
if (int.TryParse(buttonValue, out arg))
{
if (i > 1) i = 0;
number[i] = arg;
i = i + 1;
}
else
{
switch (buttonValue)
{
case "+":
operatorSymbol = buttonValue;
break;
case "-":
operatorSymbol = buttonValue;
break;
case "x":
operatorSymbol = buttonValue;
break;
case "÷":
operatorSymbol = buttonValue;
break;
case "=":
switch (operatorSymbol)
{
case "+":
result = number[0] + number[1];
break;
case "-":
result = number[0] - number[1];
break;
case "x":
result = number[0] * number[1];
break;
case "÷":
result = number[0] / number[1];
break;
}
displayerResults = true;
inputString = result.ToString();
number = new int[2];
break;
}
}
inputField.text = inputString;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Calculator : MonoBehaviour
{
[SerializeField]
Text inputField;
string inputString;
int[] number = new int[2];
string operatorSymbol;
int i = 0;
int result;
bool displayerResults = false;
public void ButtonPressed()
{
if(displayerResults == true)
{
inputField.text = "";
inputString = "";
displayerResults = false;
}
string buttonValue = EventSystem.current.currentSelectedGameObject.name;
inputString += buttonValue;
int arg;
if (int.TryParse(buttonValue, out arg))
{
if (i > 1) i = 0;
number = arg;
i = i + 1;
}
else
{
switch (buttonValue)
{
case "+":
operatorSymbol = buttonValue;
break;
case "-":
operatorSymbol = buttonValue;
break;
case "x":
operatorSymbol = buttonValue;
break;
case "÷":
operatorSymbol = buttonValue;
break;
case "=":
switch (operatorSymbol)
{
case "+":
result = number[0] + number[1];
break;
case "-":
result = number[0] - number[1];
break;
case "x":
result = number[0] * number[1];
break;
case "÷":
result = number[0] / number[1];
break;
}
displayerResults = true;
inputString = result.ToString();
number = new int[2];
break;
}
}
inputField.text = inputString;
}
}
Actually i didn’t do any thing, but i made the first reply to correct the formatting of the code so i can read it and help you.
your problem is that the code does not allow you to store two digits integer, why???
Because every time you press on a digit you immediately store it in the array (in line 32 to line 34), so if you want to type 11, will press 1 and your code will store that 1 in the first index in the array, then you press 1 again and the code will store it in second index of the array.
that will end up having an array like this:
number[0] = 1;
number[1] = 1;
that’s why you get answer equals to 2.
To solve this, you should only store the integer after you press on operator symbol.
declare the number array as public public int[ ] number; so you can see it in the inspector.
Now everytime I press it is equal to zero so which correct line I should declare the integer (line from my old code)
below my new code with new error.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Calculator : MonoBehaviour
{
[SerializeField]
Text inputField;
string inputString;
int[] number = new int[2];
string operatorSymbol;
int i = 0;
int result;
bool displayerResults = false;
public void ButtonPressed()
{
if(displayerResults == true)
{
inputField.text = "";
inputString = "";
displayerResults = false;
}
string buttonValue = EventSystem.current.currentSelectedGameObject.name;
inputString += buttonValue;
int arg;
if (int.TryParse(buttonValue, out arg))
{
}
else
{
switch (buttonValue)
{
case "+":
operatorSymbol = buttonValue;
if (i > 1) i = 0;
number[i] = arg;
i = i + 1;
break;
case "-":
operatorSymbol = buttonValue;
if (i > 1) i = 0;
number[i] = arg;
i = i + 1;
break;
case "x":
operatorSymbol = buttonValue;
if (i > 1) i = 0;
number[i] = arg;
i = i + 1;
break;
case "÷":
operatorSymbol = buttonValue;
if (i > 1) i = 0;
number[i] = arg;
i = i + 1;
break;
case "=":
switch (operatorSymbol)
{
case "+":
result = number[0] + number[1];
break;
case "-":
result = number[0] - number[1];
break;
case "x":
result = number[0] * number[1];
break;
case "÷":
result = number[0] / number[1];
break;
}
displayerResults = true;
inputString = result.ToString();
number = new int[2];
break;
}
}
inputField.text = inputString;
}
}
Sorry I am new here I don’t know much, please help me