@Mister_krid

Как правильно конвертировать массив?

Делал программку:
Напишите программу, которая определяет, сколько раз встречается заданное число x в данном массиве.
Проблема: я задал длину одного массива после чего ввел элементы для этого массива(через отдельную string переменную), конвертировал эту строку в отдельные элементы и вставил в массив которому я задал длину(пытался), но при этой операции он просто превратил строку символов в массив и заменил вместо того с заданной длинной.Как сделать так что бы если в массив из 5 элементов вводится допустим 3 элемента, остальные он оставлял нулями, а если больше просил вести элементы заново? Так же хочу писать хороший полностью готовый для использования код поэтому приветствую критику, что лучше было не делать, как можно изменить, что можно добавить и т.д.
static void Main(string[] args)
        {
            int n;

            do
            {
                Console.WriteLine("Введите размер массива до 1000");
                n = Convert.ToInt32(Console.ReadLine());
            } while (n > 1000);
            Console.WriteLine();

            int[] myArray = new int[n];
            bool condition = true;
            string strArray;

            do
            {
                //Задаем элементы массива и конвертируем в int (тут проблема)
                Console.WriteLine("Введите элементы массива до 1000");
                strArray = Console.ReadLine();
                myArray = strArray.Split(' ').Select(n => Convert.ToInt32(n)).ToArray();

                for (int i = 0; i < myArray.Length; i++)
                {

                    if (Math.Abs(myArray[i]) < 999)
                        condition = false;
                    else
                        condition = true;
                }
            } while (condition);
            Console.WriteLine();

            int x;

            do
            {
                Console.WriteLine("Введите число для поиска повторений");
                x = Convert.ToInt32(Console.ReadLine());
            } while (x > 1000);
            Console.WriteLine();

            int repetitions = 0;

            for (int i = 0; i < myArray.Length; i++)
            {
                if (myArray[i] == x)
                    repetitions++;
            }
            Console.WriteLine();

            Console.WriteLine(x + "повторятеся" + repetitions + "раз");
        }

    }
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
serafimprozorov
@serafimprozorov
Люблю Erlang....
Эх, вспомнил я первый курс универа...
Я бы, наверное, сделал как-то так, учитывая, что это всё же учебное задание, если есть вопросы, велкам, отвечу.

class Program
{
    private const int MinArrayLength = 2;
    private const int MaxArrayLength = 20;


    private static int ReadInteger(string prompt)
    {
        while (true)
        {
            Console.Write(prompt);
            
            string input = Console.ReadLine();

            if (!int.TryParse(input, out int number))
            {
                Console.WriteLine($"Значение {input} не является числом");
                continue;
            }

            return number;
        }
    }

    private static int ReadArrayLength()
    {
        while (true)
        {
            var number = ReadInteger($"Введите размер массива от {MinArrayLength} до {MaxArrayLength}: ");

            if (number > MaxArrayLength || number < MinArrayLength)
            {
                Console.WriteLine($"Число {number} лежит вне границ интервала [{MinArrayLength}..{MaxArrayLength}]");
                continue;
            }

            return number;
        }
    }

    private static int[] ReadArray(int length)
    {
        while (true)
        {
            Console.Write($"Введите до {length} целых чисел через пробел: ");

            string input = Console.ReadLine();
            string[] entries = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            if (entries.Length > length)
            {
                Console.WriteLine($"Вы ввели более {length} чисел");
                continue;
            }

            if (!TryParseIntegerArray(length, entries, out var array))
                continue;

            return array;
        }
    }

    private static bool TryParseIntegerArray(int length, string[] strings, out int[] array)
    {
        array = new int[length];

        for (int i = 0; i < strings.Length; ++i)
        {
            if (!int.TryParse(strings[i], out int number))
            {
                Console.WriteLine($"Строка {strings[i]} (позиция {i}) не является числом");
                return false;
            }

            array[i] = number;
        }

        if (length > strings.Length)
        {
            Array.Clear(array, strings.Length, length - strings.Length);
        }

        return true;
    }

    private static int CountNumberOccurs(int[] array, int targetNumber)
    {
        int occursCount = 0;
        
        for (int i = 0; i < array.Length; ++i)
        {
            if (array[i] == targetNumber)
                occursCount++;
        }

        return occursCount;
    }


    static void Main(string[] args)
    {
        int arrayLength = ReadArrayLength();
        int[] array = ReadArray(arrayLength);
        int targetNumber = ReadInteger("Введите целое число для поиска повторений: ");

        int occursCount = CountNumberOccurs(array, targetNumber);

        Console.WriteLine($"Количество вхождений числа {targetNumber} в массив: {occursCount}.");
        Console.WriteLine("Нажмите <ENTER> для выхода.");
        Console.ReadLine();
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы