Код выводит верный результат в Visual Studio , но некорректный при тестировании на Codewars

 public static string calculateString(string calcIt)
        {
            char[] itterationChars = new char[] { '+', '-', '*', '/','.' };
            char currentItteration = '+';
            string result = "";
            char[] charTemp = calcIt.ToCharArray();
            foreach(char temp in charTemp)
            {
                if (itterationChars.Contains(temp) && temp !='.') currentItteration = temp;
                result += (Char.IsDigit(temp))|| itterationChars.Contains(temp)? Convert.ToString(temp) : "";
            }
            string[] Cleared = result.Split('*','-','+','/');
            Cleared[0] = Cleared[0].Replace('.',',') ;
            Cleared[1] = Cleared[1].Replace('.', ',');
            double first = Double.Parse(Cleared[0]);
            double second = Convert.ToDouble(Cleared[1]);
            double resultNum = 0;
            switch (currentItteration)
            {
                case '+':
                    resultNum += first + second;
                    break;
                case '-':
                    resultNum += first - second;
                    break;
                case '*':
                    resultNum += first * second;
                    break;
                case '/':
                    resultNum += first / second;
                    break;
            }
            result = "";
            result += Convert.ToString((int)resultNum);
            return result;
        }

Буду рад, если вы поможете мне разобраться почему не проходят тесты codewars, однако все прекрасно работает с теми же аргументами в Visual Studio https://www.codewars.com/kata/56b5dc75d362eac53d000bc8/train/csharp


Ответы (1 шт):

Автор решения: Aziz Umarov

Я подредактировал немного код. Думаю все понятно.

public string calculateString(string calcIt)
{
    char[] itterationChars = new char[] { '+', '-', '*', '/','.' };
    char currentItteration = '+';
    string result = "";
    char[] charTemp = calcIt.ToCharArray();
    foreach(char temp in charTemp)
    {
        if (Array.Exists(itterationChars, element => element == temp) && temp != '.') currentItteration = temp;
        result += (Char.IsDigit(temp)) || Array.Exists(itterationChars,element => element == temp) ? Convert.ToString(temp) : "";
    }
    string[] Cleared = result.Split('*','-','+','/');
    Cleared[0] = Cleared[0].Replace('.',',').Split(',')[0] ;
    Cleared[1] = Cleared[1].Replace('.', ',').Split(',')[0];
    double first = Double.Parse(Cleared[0]);
    double second = Double.Parse(Cleared[1]);
    double resultNum = 0;
    switch (currentItteration)
    {
        case '+':
            resultNum += first + second;
            break;
        case '-':
            resultNum += first - second;
            break;
        case '*':
            resultNum += first * second;
            break;
        case '/':
            resultNum += first / second;
            break;
    }
    result = "";
    result += Convert.ToString((int)resultNum);
    return result;
}

изменения коснулись

Cleared[0] = Cleared[0].Replace('.',',').Split(',')[0];
Cleared[1] = Cleared[1].Replace('.', ',').Split(',')[0];

добавил .Split(',')[0]

Заменил itterationChars.Contains(temp)

Array.Exists(itterationChars, element => element == temp)
→ Ссылка