Java: как инициализировать размер массива, если он неизвестен?
Я прошу пользователя ввести число от 1 до 100 и назначить их в массив. Размер массива не инициализируется, поскольку он зависит от количества попыток ввода пользователем числа.
Как назначить длину массива?
Если пользователь вводит 5 6 7 8 9 (5 номеров), то
int[] list;
становится
int[] list = new int[5];
Я пытаюсь использовать цикл, но он не остановится.
int[] integers;
int j = 0;
do {
integers = new int[j + 1];
integers[j] = in.nextInt();
j++;
} while((integers[j-1] >= 1) ||(integers[j-1]) <= 100);
Ответы
Ответ 1
Вы должны использовать List
для чего-то вроде этого, а не массива. Как правило, когда вы не знаете, сколько элементов вы добавите в массив перед рукой, вместо этого используйте List
. Большинство из них, вероятно, решат эту проблему, используя ArrayList
.
Если вы действительно не можете использовать List
, то вам, вероятно, придется использовать массив с некоторым начальным размером (может быть, 10?) и отслеживать емкость вашего массива в сравнении с тем, сколько элементов вы добавляете, и скопируйте элементы в новый, более крупный массив, если у вас закончится комната (это, по сути, то, что ArrayList
делает внутри). Также обратите внимание, что в реальном мире вы никогда не сделаете этого так: вы бы использовали один из стандартных классов, специально предназначенных для таких случаев, например ArrayList
.
Ответ 2
Я думаю, вам нужно использовать List или классы на основе этого.
Например,
ArrayList<Integer> integers = new ArrayList<Integer>();
int j;
do{
integers.add(int.nextInt());
j++;
}while( (integers.get(j-1) >= 1) || (integers.get(j-1) <= 100) );
Вы можете прочитать эту статью для получения дополнительной информации о том, как ее использовать.
Ответ 3
Я согласен с тем, что структура данных, такая как List, является наилучшим способом:
List<Integer> values = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
value = in.nextInt();
values.add(value);
} while (value >= 1) && (value <= 100);
Или вы можете просто выделить в нем массив максимальных значений и значений нагрузки:
int maxValues = 100;
int [] values = new int[maxValues];
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
value = in.nextInt();
values[numValues++] = value;
} while (value >= 1) && (value <= 100) && (numValues < maxValues);
Ответ 4
Если вы хотите придерживаться массива, тогда вы можете использовать его. Но это нехорошо по сравнению с List и не рекомендуется. Однако это решит вашу проблему.
import java.util.Scanner;
public class ArrayModify {
public static void main(String[] args) {
int[] list;
String st;
String[] stNew;
Scanner scan = new Scanner(System.in);
System.out.println("Enter Numbers: "); // If user enters 5 6 7 8 9
st = scan.nextLine();
stNew = st.split("\\s+");
list = new int[stNew.length]; // Sets array size to 5
for (int i = 0; i < stNew.length; i++){
list[i] = Integer.parseInt(stNew[i]);
System.out.println("You Enterred: " + list[i]);
}
}
}
Ответ 5
int i,largest = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of numbers in the list");
i = scan.nextInt();
int arr[] = new int[i];
System.out.println("Enter the list of numbers:");
for(int j=0;j<i;j++){
arr[j] = scan.nextInt();
}
Приведенный выше код работает хорошо. Я взял данные о количестве элементов в списке и соответствующим образом инициализировал массив.