Можно ли создать массив с помощью переменной в Java?

#java #arrays

#java #массивы

Вопрос:

В моем курсе информатики мне сказали, что для создания массива можно использовать только литералы и именованные константы, например

 int[] myarray = new int[10];
 

или

 final int ARRAY_SIZE = 10;
int[] myarray = new int[ARRAY_SIZE];
 

Профессор сказал, что изменяемая переменная не может быть использована для создания массива, например

 int arraysize = 10;
int[] myarray = new int[arraysize];
 

Я думал, что после создания массива его размер изменить нельзя, поэтому не имеет значения, что используется для его создания (литерал, именованная константа или переменная). Кроме того, разве ключевое слово ‘final’ не влияет только на переменную (например, ARRAY_SIZE), а не на то, что ей присваивается?

Итак, почему я не могу использовать переменную (например, arraysize) для создания массива?

Мой профессор отказывается обсуждать это со мной, поэтому я поднял этот вопрос здесь.

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

1. он ошибается….

Ответ №1:

Я вижу, что вы спрашиваете здесь, и я могу сказать, почему ваш профессор сказал вам это. Основная причина в том, что costant (final) Целые числа не изменяются во всем коде, поэтому это никоим образом не изменит размер массива.

НО это не значит, что вы не можете использовать его для просмотра этого кода, который следует ниже:

 short numberOne =5;
int numberTwo = 5;
byte numberThree = 5;
final int NUMBER_FOUR = 5;
    
int[] arrayOne = new int[numberOne]; //short
int[] arrayTwo = new int[numberTwo]; //int
int[] arrayThree = new int[numberThree]; //byte
int[] arrayFour = new int[NUMBER_FOUR];  //final INT 
 

все эти комбинации проверены и могут быть использованы, даже если они не являются окончательными

Ответ №2:

В Java вполне возможно создать массив с длиной в качестве переменной, в этом нет ничего плохого по своей сути. Также не имеет значения, была ли переменная, которую вы использовали в качестве длины, объявлена как final или нет.

Ответ №3:

Ваш профессор ошибается. Размер, используемый для инициализации массива, не обязательно должен быть постоянным. Если вы действительно хотите довести дело до конца, вы можете ввести случайность:

 int samples = 6; // 6 proofs
int maxSize = 100;
for (int i = 0; i < samples; i  ) {
    int mysterySize = ThreadLocalRandom.current().nextInt(maxSize); // Random size
    int[] mysteryArray = new int[mysterySize];
    System.out.println("Mystery Array is size: "   mysteryArray.length);
}
 

Вывод:

 Mystery Array is size: 38
Mystery Array is size: 13
Mystery Array is size: 81
Mystery Array is size: 27
Mystery Array is size: 37
Mystery Array is size: 40
 

Обратите внимание на этот вывод, что размер массива никоим образом не является постоянным. Это правда, что после инициализации массива вы не можете изменить его размер. Однако вы всегда можете создать новый массив переменного размера и скопировать элементы из исходного в новый.

Если вам нужен тип данных, который может изменять свой размер, взгляните на Lists , Sets , и другие Collections .