Почему я не могу правильно назначить переменные для массива?

Итак, я пишу программу, которая вводит число (двоичное), а затем назначает каждую цифру этого ввода в массив.

static void Main(string[] args)
{
    Console.Write("Please enter a binary number: ");
    String input = Console.ReadLine();
    int inputLength = input.Length;
    int nInput = Convert.ToInt32(input);
    int[] digits;
    digits = new int[inputLength];

    int remain = 10;
    int divider = 1;
    for (int i = 0; i > inputLength; i++)
    {
        digits[i] = (nInput % remain) / divider;
        remain = remain * 10;
        divider = divider * 10;
    }
    Console.WriteLine("Demo number  " + digits[0]);
}

Тем не менее, кажется, что все мои массивы имеют значение 0, когда я запускаю код. Это почему?

Так что, если мой ввод 11010,digit[0] должно быть 0.digit[1] должно быть 1.digit[2] должно быть 0. digit[3] должно быть 1.digit[4] должно быть 1.

2 ответа

Решение

Цикл не выполняется, поскольку его условие всегда ложно; Таким образом, вы получаете его значение по умолчанию, измените условие как i < inputLength;

Если вы сделаете это и введете "123"

Вывод на консоль будет: Demo number 3; И массив будет

digit[0]=3
digit[1]=2
digit[2]=1

Несколько предложений по улучшению вашего кода:

  • использование int.TryParse(); вместо Convert.ToInt32(); во избежание исключения исключения. Вы можете увидеть сравнение здесь
  • Поскольку числа находятся в массиве, вы можете изменить их, используя Array.Reverse()

То есть..

        String input =Console.ReadLine();
        int nInput;
        int inputLength = input.Length;
        if (int.TryParse(input, out nInput))
        {
            int[] digits = new int[inputLength];
            Array.Reverse(digits);
            Console.WriteLine("Reversed Number is:{0}",String.Join( "",digits));
        }
        else { Console.WriteLine("Wrong input"); }

Попробуйте этот код!

static void Main(string[] args)
        {
            string input = Console.ReadLine();
            int[] vec = new int[input.Length]; 
            int i = 0;
            foreach (char ch in input) {
                vec[i] = Convert.ToInt32(ch.ToString());
                i++;
            }

            foreach (int numaux in vec) {
                Console.WriteLine(numaux);
            }
            Console.Read();
        }

Просто переберите строку ввода с помощью оператора foreach (избавит вас от уже указанной ошибки) и преобразуйте каждый символ в целое число, которое будет храниться внутри массива.

Ура!

Другие вопросы по тегам