如何在计算器程序中添加第二个参数(数字)?
Posted
技术标签:
【中文标题】如何在计算器程序中添加第二个参数(数字)?【英文标题】:How to add a second argument(Number) to a calculator program? 【发布时间】:2021-12-20 23:11:37 【问题描述】:我正在使用 Unity 开发一个小型计算器程序。 我只需要计算器处理两个数字。
我正在尝试实现的功能: 输入数学运算符后,应该在第三个索引中显示第二个数字。
问题: 如果在键盘上按下不同的数字,则会覆盖第一个数字,而不是添加第二个数字。
这是我创建的脚本:
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 = "";
我还添加了屏幕录像来捕捉问题:
First number being overwritten
你有什么建议吗?
谢谢
【问题讨论】:
【参考方案1】:使用 NumberInputOne 函数,如下所示;
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;
顺便说一句,我建议您查看示例计算应用程序代码。因为除了你的要求之外,总体上还有一些地方需要改进。
【讨论】:
【参考方案2】:这感觉就像是初学者的编程练习。但是构建计算器的正确方法涉及到您可能还没有学过的编程概念。这使得这是一个糟糕的选择。
我个人会通过定义一个简单的syntax tree 来表示输入的公式来构建一个计算器。包括显示公式和计算答案的方法。例如;
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
然后想想每个按钮应该如何改变语法树。
// 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();
【讨论】:
如果你想要一个计算器的所有功能,不费吹灰之力,你可以使用await CSharpScript.EvaluateAsync<int>( [user input] )
itnext.io/…
是的,不,我总是宁愿尽可能限制用户 .... CSharpScript.EvaluateAsync
很酷,直到用户变得有趣并输入 while(true)
:'D ...当然是他自己的错,但为什么还要冒险;)
在这种情况下,您可以完全控制可以输入的内容。可能发生的最坏情况应该是/0
。以上是关于如何在计算器程序中添加第二个参数(数字)?的主要内容,如果未能解决你的问题,请参考以下文章
python 中 请输入一个数字 请输入第二个数字 请输入进行的计算符合(1+ 2-):
Drupal 视图 - 使用第一个参数来计算第二个上下文过滤器参数