【问题标题】:Single line calculator - problem with last number [duplicate]单行计算器 - 最后一个数字的问题[重复]
【发布时间】:2019-09-18 12:00:29
【问题描述】:

我创建了一个控制台应用程序,它将接受用户输入的任何数字和 + 或 - 运算符,并返回结果。 比如用户可以输入1+2+3+4,结果应该是10。

我的问题是我无法弄清楚如何将最后一个数字相加到总结果中。

这意味着在我的代码中只会计算 1+2+3 而忽略 4。

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace SimpleCalculator
{
    public class Program
    {
        public static void Main()
        {
            int result = 0;
            int number;
            string numberString = "";

            Console.WriteLine("Enter numbers followed by operation eg. x+y-z");
            while (true)
            {
                string userInput = UserInput();
                //Loop into each element of the input string
                for (int i = 0; i < userInput.Length; i++)
                {
                    if((IsNumber(userInput[i])))
                    {
                        numberString += userInput[i];
                    }
                    else if (!IsNumber(userInput[i]))
                    {
                        number = Int32.Parse(numberString);
                        numberString = "";
                        result = PerformCalculation(result, number, userInput[i]);
                    }

                }
                number = Int32.Parse(numberString);
                result += number;
                Console.WriteLine($"{userInput}={result}");
            }
        }

        // check if input is number or operator
        static bool IsNumber(char input)
        {
            if (char.IsDigit(input)){return true;}
            else{return false;}
        }

        static string UserInput()
        {
            string User_input = Console.ReadLine();
            return User_input;
        }

        static int PerformCalculation(int sum, int num, char op)
        {
            switch (op)
            {
                case '+': return sum + num;
                case '-': return sum - num;
                default: throw new ArgumentException("Uknown operator");
            }
        }
    }
}

【问题讨论】:

  • 看起来你只在读取+ 时才执行加法。因此,输入的最后一位数字; 3,在您的 1+2+3 示例中,保留在 numberString 中,但从未求和。考虑当 i = userInput.Length-1 时的特殊情况,即读取最后一个数字的时间。
  • 似乎是一个可以通过调试解决的家庭作业问题。你调试过代码吗?
  • 我的建议;将每个数字及其前面的运算符作为一个数字。如果没有运算符,请使用“+”。所以“1+2+3-4”分解为“+1”、“+2”、“+3”、“-4”。把它们加在一起,你就会得到正确的答案。当然,这只适用于加法和减法。
  • 感谢您的回复,我想添加条件 input.length - 1 但卡在执行计算的位置。

标签: c#


【解决方案1】:

您已经发现您没有添加最后一个数字,让我们想一想找出原因。

只有当你拨打PerformCalculation时才会添加号码,这个号码会被拨打的条件是什么? else if (!IsNumber(userInput[i]))

如果您查看您的输入,您是否看到字符串末尾有一个非数字?如果没有,那么PerformCalculation 不会被调用。

你如何解决这个问题?在返回结果之前检查numberString 是否为空,如果不是,则在返回结果之前进行最终计算。

由于这是一个家庭作业问题,我将把剩下的留作练习。

【讨论】:

  • 谢谢,一旦我开始编码,我会调查的。这不是我自学 c# 的家庭作业——我的目标是通过添加以后的乘法和除法能力来使应用程序更复杂。
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多