Существует ли такая вещь, как массив без размера?

#c# #arrays

#c# #массивы

Вопрос:

Я играю с C #. Я пытаюсь написать программу, которая помещает цитату, введенную пользователем, в квадрат символов. Итак, проблема в том, что … пользователю необходимо указать количество строк перед вводом цитаты. Я хочу убрать этот момент, чтобы пользователь просто вводил строки своей фразы (каждая строка является новым элементом в массиве строк, поэтому я предполагаю, что программа должна как бы объявить ее сама по себе? ..). Надеюсь, я ясно объяснил, что я имел в виду x).

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

         //Greet a user, asking for the number of lines.
        Console.WriteLine("Greetings! I can put any phrase into beautiful @-square."
              "n"   "Wanna try? How many lines in the quote: ");
        int numberOfLines = Convert.ToInt32(Console.ReadLine());

        //Asking for each line.
        string[] lines = new string[numberOfLines];
        for (int i = 0; i < numberOfLines; i  )
        {
            Console.WriteLine("Enter the line: ");
            lines[i] = Console.ReadLine();
        }

        //Looking for the biggest line
        int length = 0;

        for (int i = 0; i < numberOfLines; i  )
        {
            if (length < lines[i].Length) length = lines[i].Length;
        }

        //Starting framing
        char doggy = '@';
        char space = ' ';
        length  = 4;
        string frame = new String(doggy, length);

        Console.WriteLine(frame);
        for (int i = 0; i < numberOfLines; i  )
        {
            string result = new string(space, length - 3 - lines[i].Length);
            Console.WriteLine(doggy   space   lines[i]   result   doggy);
        }
        Console.WriteLine(frame);

        Console.ReadLine();

    }
}
 

}

Комментарии:

1. List<T> Вместо этого используйте a .

2. Помимо использования списка, неясно, о чем вы спрашиваете в данный момент. Я нигде не вижу, чтобы тело вашего вопроса ссылалось на «массив без размера» — и мы не знаем, какой результат вы на самом деле получаете и что вы ожидали получить. («Я не понимаю, почему символы с левой стороны отображаются неправильно» не говорит нам ни о чем из этого.) Пожалуйста, прочитайте codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question и отредактируйте свой вопрос, чтобы прояснить его.

3. List<T> проще и гибче, чем array , поэтому он решит, по крайней мере, проблему необходимости знать конечную / максимальную длину массива.

Ответ №1:

Существует разрыв в производительности и функциональности между «общими списками» и массивами, вы можете прочитать больше о минусах и плюсах этих двух объектов в Интернете,

например, вы можете использовать list как Dai, упомянутый в комментарии, подобном этому

 List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");
 

или вы можете использовать arraylist

 ArrayList arraylist = new ArrayList();
arraylist.Add();
 

или даже вы можете изменить размер массива в любое время, но он стирает данные в нем

 int[] arr = new int[100];
 

существует функция toArray(), с помощью которой вы можете изменить общий список на массив

Комментарии:

1. Сегодня нет законных оснований для использования ArrayList — ни в какой момент, начиная с .NET Framework 2.0 в 2005 году. Его следует удалить из . ЧИСТАЯ полностью, имо.

Ответ №2:

Ваша проблема с выводом левой стороны заключается в том, что вы добавляете два значения char . Это не то, чего вы ожидаете. Вы должны преобразовать символ в строку, чтобы добавить его к другим строкам:

 Console.WriteLine(doggy.ToString()   space.ToString()   lines[i]   result   doggy.ToString());