motkot
@motkot
Программирование C#.

Выдает ошибку при тесте на сайте CodeWars. Как исправить?

Задание:
The rgb function is incomplete. Complete it so that passing in RGB decimal values will result in a hexadecimal representation being returned. Valid decimal values for RGB are 0 - 255. Any values that fall out of that range must be rounded to the closest valid value.

Note: Your answer should always be 6 characters long, the shorthand with 3 will not work here.

The following are examples of expected output values:

Rgb(255, 255, 255) # returns FFFFFF
Rgb(255, 255, 300) # returns FFFFFF
Rgb(0,0,0) # returns 000000
Rgb(148, 0, 211) # returns 9400D3


Сам код вроде как правильно выводит результат.
Код:

using System;
public class Kata
    {
        public static string Rgb(int r, int g, int b)
        {
            char[] SixChar = new char[6] { 'A', 'B', 'C', 'D', 'E', 'F' };
            string[] _result = new string[3];
            int CurrentNum;
            int CurrentIndex = 0;
            int[] rgb = new int[3] { r, g, b };
            foreach (int element in rgb)
            {
                CurrentNum = element;
                if (CurrentNum > 255)
                {
                    _result[CurrentIndex] = "FF";
                    break;
                }
                if (CurrentNum != 0)
                {
                    if (CurrentNum > 16)
                    {
                        while (CurrentNum != 0)
                        {
                            bool Using = false;
                            switch (CurrentNum % 16)
                            {
                                case 10:
                                    _result[CurrentIndex] += SixChar[0];
                                    break;

                                case 11:
                                    _result[CurrentIndex] += SixChar[1];
                                    break;

                                case 12:
                                    _result[CurrentIndex] += SixChar[2];
                                    break;

                                case 13:
                                    _result[CurrentIndex] += SixChar[3];
                                    break;

                                case 14:
                                    _result[CurrentIndex] += SixChar[4];
                                    break;

                                case 15:
                                    _result[CurrentIndex] += SixChar[5];
                                    break;
                                default:
                                    _result[CurrentIndex] += CurrentNum % 16;
                                    Using = true;
                                    break;
                            }

                            if (Using)
                            {
                                switch (CurrentNum / 16)
                                {
                                    case 10:
                                        _result[CurrentIndex] += SixChar[0];
                                        break;

                                    case 11:
                                        _result[CurrentIndex] += SixChar[1];
                                        break;

                                    case 12:
                                        _result[CurrentIndex] += SixChar[2];
                                        break;

                                    case 13:
                                        _result[CurrentIndex] += SixChar[3];
                                        break;

                                    case 14:
                                        _result[CurrentIndex] += SixChar[4];
                                        break;

                                    case 15:
                                        _result[CurrentIndex] += SixChar[5];
                                        break;
                                    default:
                                        _result[CurrentIndex] += CurrentNum / 16;
                                        break;
                                }
                                break;
                            }
                            CurrentNum /= 16;
                        }
                    }
                }
                else
                {
                    _result[CurrentIndex] += "00";
                }
                CurrentIndex++;
            }

            char[] result1 = _result[0].ToCharArray();
            char[] result2 = _result[1].ToCharArray();
            char[] result3 = _result[2].ToCharArray();
            Array.Reverse(result1);
            Array.Reverse(result2);
            Array.Reverse(result3);

            return new string(result1) + new string(result2) + new string(result3);
        }
    }


602594c923fb5272712695.png
  • Вопрос задан
  • 458 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
В какой-то момент возник Null reference exception. Пробуйте дебажить.
Но вообще код ужасный - я в вашем прошлом вопросе дал пример сильно лучшего кода.

PS: зашёл на codewars, и обнаружил, что я уже решил её миллион лет назад:
public class Kata
{
  public static string Rgb(int r, int g, int b) 
      => $"{Normalize(r):X2}{Normalize(g):X2}{Normalize(b):X2}";
  
  private static byte Normalize(int a) 
      => (byte)(a < 0 ?  0 : a > 255 ? 255 : a);
}

Вы слишком переусложняете своё решение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект