Подтвердить что ты не робот

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);
4b9b3361

Ответ 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();
}

Приведенный выше код работает хорошо. Я взял данные о количестве элементов в списке и соответствующим образом инициализировал массив.