Insira o array sem saber que é tamanho

Existe uma maneira de fazer um array em java, sem definir ou pedir seu tamanho primeiro? Aka o usuário insere alguns números como argumentos, e o programa cria um array com tantos argumentos.

Existe uma maneira de fazer um array em java, sem definir ou pedir seu tamanho primeiro? Aka o usuário insere alguns números como argumentos, e o programa cria um array com tantos argumentos.

Não está claro exatamente em que situação você está. Se você souber o comprimento da matriz em tempo de execução, mas não em tempo de compilation, tudo bem:

 public class Test { public static void main(String[] args) { int length = Integer.parseInt(args[0]); String[] array = new String[length]; System.out.println("Created an array of length: " + array.length); } } 

Você pode executar isso como:

 java Test 5 

e criará uma matriz de comprimento 5.

Se você realmente não sabe o comprimento da matriz antes de precisar criá-la – por exemplo, se você for pedir elementos ao usuário e, em seguida, fazer com que eles insiram um valor especial quando terminarem, então você provavelmente desejaria usar uma List de algum tipo, como ArrayList .

Por exemplo:

 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); System.out.println("Enter numbers, with 0 to end"); List list = new ArrayList<>(); while (true) { int input = scanner.nextInt(); if (input == 0) { break; } list.add(input); } System.out.println("You entered: " + list); } } 

Você pode então converter essa List em um array, se você realmente precisa, mas o ideal é que você pode continuar a usá-lo como uma List .

Você precisa usar um ArrayList para isso.

EDITAR:

Miroslav é provavelmente um estudante tentando completar uma tarefa. Normalmente, nessas tarefas, você é solicitado a ler os valores da input padrão e fazer algo com eles. Nesse caso, armazene-os em uma matriz. Então, no momento em que ele tem um valor para armazenar na matriz, ele ainda não sabe quantos valores estão chegando. Então, ArrayList é o caminho a percorrer.

Is there a way to make an array in java, without defining or asking for it's length first ?

Sim, é possível em Java. Isso não é possível em C ++ embora. C ++ requer que o tamanho da matriz seja determinado em tempo de compilation.

Em Java, você pode criar novos arrays em tempo de execução.

 int[] array; //Create a reference of int array (no arrays created yet) //Prompt for size.. Scanner scn = new Scanner(System.in); System.out.println("Enter size of array;") int size = scn.nextInt(); array = new int[size]; //this is allowed in Java 

Algumas informações adicionais:

Tome nota que as matrizes são de tamanho fixo. Depois que o tamanho for determinado (mesmo em tempo de execução), você não poderá mais alterá-lo. No entanto, há uma solução alternativa se você quiser “expandir” o tamanho da matriz.

 //continuing from above coding example.. array = new int[newSize]; 

Isso fará com que a array aponte para uma nova matriz. Portanto, se você quiser manter os valores da matriz antiga, terá que copiar manualmente os elementos da matriz antiga para a nova matriz. No entanto , isso não é eficiente.

Uma maneira eficiente de aumentar e reduzir o tamanho do array é usar List ou ArrayList . Mas para responder a sua pergunta sozinho em matrizes. Sim, você pode criá-lo em tempo de execução e também pode apontar sua referência de matriz para outro array em tempo de execução também.

ArrayList é provavelmente a melhor estrutura nesta situação quando você só precisa adicionar elementos. Se você quiser adicionar / excluir elementos do meio da coleção, use LinkedList.