I'm trying to find a way to make this code more efficient than using a lot of if
statements because there are a lot of combinations. The final result variable is an equation made from randomly chosen arithmetic signs and the operands are random numbers between 1 and 10 to create an equation. But after 2 operands there are a lot of combinations so I need help finding a different way so I don't have to manually put in all the possible combinations in if
statements. The equations can either have two operators at the least to 4 operators and up to to 5 operands per equation so each equation will be randomly created.
public class MathEngine : MonoBehaviour## Heading ##
{
public Text equationText;
public bool setFixedNumOfOperands;
public bool sumOnly;
public bool subtractionOnly;
public bool multiplyOnly;
public bool divideOnly;
private List<string> randomSigns;
private List<int> operandList;
[Range(2,5)]
public int numberOFOperands;
public int operandRange;
public int operandRangeMinimum = 1;
public int operandRangeMaximum= 10;
string randomsigns;
private float finalResult;
private float operand1;
private float operand2;
private float operand3;
private float operand4;
private float operand5;
// Use this for initialization
private void Start()
{
operandRange = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operand1 = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operand2 = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operand3 = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operand4 = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operand5 = Random.Range(operandRangeMinimum, operandRangeMaximum + 1);
operandList = new List<int>();
randomSigns = new List<string>();
randomSigns.Add("+");
randomSigns.Add("-");
randomSigns.Add("*");
randomSigns.Add("/");
string sign1 = randomSigns[Random.Range(0, 4)];
string sign2 = randomSigns[Random.Range(0,4)];
string sign3 = randomSigns[Random.Range(0, 4)];
string sign4 = randomSigns[Random.Range(0, 4)];
string sign5 = randomSigns[Random.Range(0, 4)];
string sign = randomSigns[Random.Range(0, 4)];
if (setFixedNumOfOperands == false)
{
numberOFOperands = Random.Range(2, 6);
for (int i = 0; i < numberOFOperands; i++)
{
//randomsigns = randomSigns[Random.Range(0, 4)];
operandList.Add(i);
}
Debug.Log("random: " + numberOFOperands);
Debug.Log("number of operands in list: " + operandList.Count);
}
else
{
for (int i = 0; i < numberOFOperands; i++)
{
operandList.Add(i);
}
Debug.Log("number of operands in list: " + operandList.Count);
}
//----------2 sign combinations 3 operands--------
if (numberOFOperands == 3 && setFixedNumOfOperands)
{
//----If all signs are the same-----
if (sign1 == "+" && sign2 == "+")
{
finalResult = operand1 + operand2 + operand3;
}
if (sign1 == "-" && sign2 == "-")
{
finalResult = operand1 - operand2 - operand3;
}
if (sign1 == "*" && sign2 == "*")
{
finalResult = operand1 * operand2 * operand3;
}
if (sign1 == "/" && sign2 == "/")
{
finalResult = operand1 / operand2 / operand3;
}
//---------Addition Combinations---------
if (sign1 == "+" && sign2 == "/")
{
finalResult = (operand1 + operand2) / operand3;
}
if (sign1 == "+" && sign2 == "-")
{
finalResult = operand1 + operand2 - operand3;
}
if (sign1 == "+" && sign2 == "*")
{
finalResult = operand1 + (operand2 * operand3);
}
//---------Subtraction Combinations---------
if (sign1 == "-" && sign2 == "/")
{
finalResult = (operand1 - operand2) / operand3;
}
if (sign1 == "-" && sign2 == "+")
{
finalResult = operand1 - operand2 + operand3;
}
if (sign1 == "-" && sign2 == "*")
{
finalResult = operand1 - (operand2 * operand3);
}
//---------Multiplication Combinations---------
if (sign1 == "*" && sign2 == "/")
{
finalResult = (operand1 * operand2) / operand3;
}
if (sign1 == "*" && sign2 == "+")
{
finalResult = (operand1 * operand2) + operand3;
}
if (sign1 == "*" && sign2 == "-")
{
finalResult = (operand1 * operand2) - operand3;
}
//---------Division Combinations---------
if (sign1 == "/" && sign2 == "*")
{
finalResult = (operand1 / operand2) * operand3;
}
if (sign1 == "/" && sign2 == "+")
{
finalResult = (operand1 / operand2) + operand3;
}
if (sign1 == "/" && sign2 == "-")
{
finalResult = (operand1 / operand2) - operand3;
}
//--------if only 2 signs and 3 operands -------------
equationText.text = operand1 + " " + sign1 + " " + operand2 + " " + sign2 + " " + operand3 + " " + "= " + finalResult;
}
//----------3 sign combinations 4 operands--------
if (numberOFOperands == 4 && setFixedNumOfOperands)
{
//----If all signs are the same-----
if (sign1 == "+" && sign2 == "+" && sign3 == "+")
{
finalResult = operand1 + operand2 + operand3 + operand4;
}
if (sign1 == "-" && sign2 == "-" && sign3 == "-")
{
finalResult = operand1 - operand2 - operand3 - operand4;
}
if (sign1 == "*" && sign2 == "*" && sign3 == "*")
{
finalResult = operand1 * operand2 * operand3 * operand4;
}
if (sign1 == "/" && sign2 == "/" && sign3 == "/")
{
finalResult = operand1 / operand2 / operand3 / operand4;
}
//---------Addition Combinations---------
if (sign1 == "+" && sign2 == "/" && sign3 == "/")
{
finalResult = (operand1 + operand2) / operand3 / operand4;
}
if (sign1 == "+" && sign2 == "-" && sign3 == "-")
{
finalResult = operand1 + operand2 - operand3 - operand4;
}
if (sign1 == "+" && sign2 == "*" && sign3 == "*" )
{
finalResult = operand1 + (operand2 * operand3) * operand4;
}
//---------
if (sign1 == "+" && sign2 == "+" && sign3 == "*")
{
finalResult = operand1 + operand2 + (operand3 * operand4);
}
if (sign1 == "+" && sign2 == "+" && sign3 == "/")
{
finalResult = operand1 + operand2 + (operand3 / operand4);
}
if (sign1 == "+" && sign2 == "+" && sign3 == "-")
{
finalResult = operand1 + operand2 + operand3 - operand4;
}
//-----------
if (sign1 == "+" && sign2 == "*" && sign3 == "+")
{
finalResult = operand1 + (operand2 * operand3) + operand4;
}
if (sign1 == "+" && sign2 == "/" && sign3 == "+")
{
finalResult = operand1 + (operand2 / operand3) + operand4;
}
if (sign1 == "+" && sign2 == "-" && sign3 == "+")
{
finalResult = operand1 + operand2 - operand3 + operand4;
}
//---------Subtraction Combinations---------
if (sign1 == "-" && sign2 == "/" && sign3 == "/")
{
finalResult = (operand1 - operand2) / (operand3 / operand4);
}
if (sign1 == "-" && sign2 == "+" && sign3 == "+")
{
finalResult = operand1 - operand2 + operand3 + operand4;
}
if (sign1 == "-" && sign2 == "*" && sign3 == "*")
{
finalResult = operand1 - (operand2 * operand3) * operand4;
}
//---------
if (sign1 == "-" && sign2 == "-" && sign3 == "*")
{
finalResult = operand1 - operand2 - (operand3 * operand4);
}
if (sign1 == "-" && sign2 == "-" && sign3 == "/")
{
finalResult = operand1 - operand2 - (operand3 / operand4);
}
if (sign1 == "-" && sign2 == "-" && sign3 == "+")
{
finalResult = operand1 - operand2 - operand3 + operand4;
}
//-----------
if (sign1 == "-" && sign2 == "*" && sign3 == "-")
{
finalResult = operand1 - (operand2 * operand3) - operand4;
}
if (sign1 == "-" && sign2 == "/" && sign3 == "-")
{
finalResult = operand1 - (operand2 / operand3) - operand4;
}
if (sign1 == "-" && sign2 == "+" && sign3 == "-")
{
finalResult = operand1 - operand2 + operand3 - operand4;
}
//---------Multiplication Combinations---------
if (sign1 == "*" && sign2 == "/" && sign3 == "/")
{
finalResult = (operand1 * operand2) / operand3 / operand4;
}
if (sign1 == "*" && sign2 == "+" && sign3 == "+")
{
finalResult = (operand1 * operand2) + operand3 + operand4;
}
if (sign1 == "*" && sign2 == "-" && sign3 == "-")
{
finalResult = (operand1 * operand2) - operand3 - operand4;
}
//---------
if (sign1 == "*" && sign2 == "*" && sign3 == "-")
{
finalResult = (operand1 * operand2) * operand3 - operand4;
}
if (sign1 == "*" && sign2 == "*" && sign3 == "/")
{
finalResult = (operand1 * operand2) * (operand3 / operand4);
}
if (sign1 == "*" && sign2 == "*" && sign3 == "+")
{
finalResult = (operand1 * operand2) * (operand3 + operand4);
}
//-----------
if (sign1 == "*" && sign2 == "-" && sign3 == "*")
{
finalResult = (operand1 * operand2) - (operand3 * operand4);
}
if (sign1 == "*" && sign2 == "/" && sign3 == "*")
{
finalResult = (operand1 * operand2) / (operand3 * operand4);
}
if (sign1 == "*" && sign2 == "+" && sign3 == "*")
{
finalResult = (operand1 * operand2) + (operand3 * operand4);
}
//---------Division Combinations---------
if (sign1 == "/" && sign2 == "*" && sign3 == "*")
{
finalResult = (operand1 / operand2) * operand3 * operand4;
}
if (sign1 == "/" && sign2 == "+" && sign3 == "+")
{
finalResult = (operand1 / operand2) + operand3 + operand4;
}
if (sign1 == "/" && sign2 == "-" && sign3 == "-")
{
finalResult = (operand1 / operand2) - operand3 - operand4;
}
//---------
if (sign1 == "/" && sign2 == "/" && sign3 == "-")
{
finalResult = (operand1 / operand2) / (operand3 - operand4);
}
if (sign1 == "/" && sign2 == "/" && sign3 == "*")
{
finalResult = (operand1 / operand2) / (operand3 * operand4);
}
if (sign1 == "/" && sign2 == "/" && sign3 == "+")
{
finalResult = (operand1 / operand2) / (operand3 + operand4);
}
//-----------
if (sign1 == "/" && sign2 == "-" && sign3 == "/")
{
finalResult = (operand1 / operand2) - (operand3 / operand4);
}
if (sign1 == "/" && sign2 == "*" && sign3 == "/")
{
finalResult = (operand1 / operand2) * (operand3 / operand4);
}
if (sign1 == "/" && sign2 == "+" && sign3 == "/")
{
finalResult = (operand1 / operand2) + (operand3 / operand4);
}
//--------if only 3 signs and 4 operands -------------
equationText.text = operand1 + " " + sign1 + " " + operand2 + " " + sign2 + " " + operand3 +" " + sign3 + " " + operand4 + " " + "= " + finalResult;
}
}
Random.Range
? Is this something you wrote yourself or is this a unity API? \$\endgroup\$