如何在计算器程序中添加第二个参数(数字)?

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&lt;int&gt;( [user input] )itnext.io/… 是的,不,我总是宁愿尽可能限制用户 .... CSharpScript.EvaluateAsync 很酷,直到用户变得有趣并输入 while(true) :'D ...当然是他自己的错,但为什么还要冒险;) 在这种情况下,您可以完全控制可以输入的内容。可能发生的最坏情况应该是/0

以上是关于如何在计算器程序中添加第二个参数(数字)?的主要内容,如果未能解决你的问题,请参考以下文章

python 中 请输入一个数字 请输入第二个数字 请输入进行的计算符合(1+ 2-):

mysql 怎么计算第二个数字和第一个数字差值

Drupal 视图 - 使用第一个参数来计算第二个上下文过滤器参数

MASM x86 添加两个整数

CodeForces - 261E Maxim and Calculator

如何在 Google Sheet 上的文本字符串中找到完全匹配并忽略第二个数字?