TheCeleryK Ответов: 2

"Невозможно неявно преобразовать тип 'int' в 'int[]'"


Я пытаюсь реализовать сортировку кучи в своем коде, он должен брать числа из файла .txt и сортировать их с помощью сортировки кучи, однако я получаю ошибку,
"Cannot implicitly convert type 'int' to 'int[]'"
это появляется на линии связи
int[] arr = value;

Я не знаю, как исправить эту проблему, любая помощь будет оценена, спасибо.

Что я уже пробовал:

Вот этот код:
static void HeapSort(int[] arr, int n)
        {
            for (int i = n / 2 - 1; i >= 0; i--)
                Heapify(arr, n, i);
            for (int i = n - 1; i >= 0; i--)
            {
                int temp = arr[0];
                arr[0] = arr[i];
                arr[i] = temp;
                Heapify(arr, i, 0);
            }
        }
        static void Heapify(int[] arr, int n, int i)
        {
            int largest = i;
            int left = 2 * i + 1;
            int right = 2 * i + 2;
            if (left < n && arr[left] > arr[largest])
                largest = left;
            if (right < n && arr[right] > arr[largest])
                largest = right;
            if (largest != i)
            {
                int swap = arr[i];
                arr[i] = arr[largest];
                arr[largest] = swap;
                Heapify(arr, n, largest);
            }
        }
        public static void Main(string[] args)
        {
            string userInput;
            Console.WriteLine("Which Array do you want to sort?");
            Console.WriteLine("1. Net_1\n2. Net_2\n3. Net_3");
            userInput = Console.ReadLine();
            if (userInput == "1")
            {
                string[] text = File.ReadAllLines("Net_1\\Net_1.txt");
                List<int> values = new List<int>(text.Length);
                int n = 10, i;
                foreach (string line in text)
                    {
                    int value;
                    if (int.TryParse(line,out value))
                        {
                            values.Add(value);
                        }

                    int[] arr = value;
                    for (i = 0; i < n; i++)
                    {
                        Console.Write(arr[i] + " ");
                    }
                    HeapSort(arr, 10);
                    Console.Write("\nSorted Array is: ");
                    for (i = 0; i < n; i++)
                    {
                        Console.Write(arr[i] + " ");
                    }
                }
            }

RamiroX

Ваше "значение" - это int, а не массив int. Если вы хотите иметь массив из вашего списка "значения", используйте значения.Метод toArray().

2 Ответов

Рейтинг:
2

Richard MacCutchan

int[] arr = value;

Переменная value это единственное целое число, поэтому вы не можете хранить его в массиве. Вы можете хранить его в одном элементе массива таким образом:
arr[0] = value;

Но сначала вам нужно создать свой массив учитывая его размер:
int[] arr = new int[the_number_of_elements_needed];

В вашем коде вы используете фиксированное значение 10 для подсчета через массив, но было бы лучше, если бы вы использовали фактическое количество элементов в вашем списке:
int[] arr = new int[values.Count];


Рейтинг:
16

Richard Deeming

Вы пытаетесь назначить одного человека int переменная (value) в массив (arr), что, очевидно, не сработает.

Вы также пытаетесь отсортировать и вывести массив на каждой итерации первой foreach петля, которая почти наверняка не то, что вы хотите.

Переместите сортировку и вывод за пределы foreach петля и использование values.ToArray() чтобы получить массив значений.

Вы также захотите использовать массив Length свойство вместо переменной n, в случае, если текст не содержит точно n действительные числа.

foreach (string line in text)
{
    int value;
    if (int.TryParse(line,out value))
    {
        values.Add(value);
    }
}

int[] arr = values.ToArray();
for (i = 0; i < arr.Length; i++)
{
    Console.Write(arr[i] + " ");
}

HeapSort(arr, arr.Length);

Console.Write("\nSorted Array is: ");
for (i = 0; i < arr.Length; i++)
{
    Console.Write(arr[i] + " ");
}


CPallini

5.