Declaração de arrays

Fala rapazeada…
Faz tempo que não apareço por aqui hein.
Mas vim trazer uma coisa que me pegou desprevinido quando eu estava dando aula ontem.

[code] public static void main(String[] args) {

  String teste[];
  
  teste[0]="teste";

}[/code]

Como declarar um array sem precisar informar o tamanho do mesmo?
Para minha surpresa o código acima dá erro de compilação.
O Erro diz:

Variable teste might not have been initialized.
teste[0]=“teste”;

Eu poderia usar

[code] public static void main(String[] args) {

  String teste[] = null;
  
  teste[0]="teste";

}[/code]
Esse código compila, porém gere uma NullPointerException em runtime.

Esse outro só compila se eu colocar o tamanho do array instanciação.

[code] public static void main(String[] args) {

  String teste[] = new String[12];
  
  teste[0]="teste";

}[/code]
Mas se eu for usar isso em um loop onde não sei quantos elementos vou adicionar no array, pode gerar um ArrayOutOfBoundException.

Lembrando que não tenho ideia do tamanho do array na hora de instanciação, e supondo que eu não possa usar uma collection ou coisa do tipo.

Alguém consegue achar uma solução? Será que o java não consegue contornar esse problema?

abração folks…

cara…
eu acrtedito que isso não seja possivel,
mas se vc esta usando um for, vc tem, teoricamente um “limitador” do for naum ? que talvez seria o tamanho
do seu array, por exemplo:

int limitador = 10;
String array[] = new String[limitador];
for(int x = 0; x < limitador; x++)
	array[x] = String.valueOf(x);

ou entao, uma bizarra solução seria usa split, por exemplo:

String geraArray;
String separador = ";";

for(int x = 0; x < limitador; x++)
	geraArray = String.valueOf(x)+separador;

//Aqui vc gera o array
String array = geraArray.split(separador);
// ECA

[/code]

Dependendo de onde você vai usar você pode usar arrays anônimos… ou você pode instâncar um array diretamente

Array Anônimo:

String[] { "aa", "bb" }

Instânciar sem declarar o tamanho


String[] array = { "aa", "bb" };

Consegue, com o uso de collections :wink:

Por coincidencia estava lendo sobre array neste momento e um meio de se criar arrays sem saber o seu tamanho é usar o Array Anonimo.
Olha o exemplo que tem no livro da Katty(SCJP 6) pagina 131 cap 3.

public void Foof{
   void takesAnArray(int[] someArray){
   //usa array como parametro
   }   

   public static void main(String[] args){
      Foof f = new Foof();
      f.takesAnArray(new int[] {7,7,8,2,5})

   }
}

Veja se isso teve alguma serventia.

[quote=feliperodPJ]Fala rapazeada…
Faz tempo que não apareço por aqui hein.
Mas vim trazer uma coisa que me pegou desprevinido quando eu estava dando aula ontem.

[code] public static void main(String[] args) {

  String teste[];
  
  teste[0]="teste";

}[/code]

Como declarar um array sem precisar informar o tamanho do mesmo?
Para minha surpresa o código acima dá erro de compilação.
O Erro diz:

Variable teste might not have been initialized.
teste[0]=“teste”;

Eu poderia usar

[code] public static void main(String[] args) {

  String teste[] = null;
  
  teste[0]="teste";

}[/code]
Esse código compila, porém gere uma NullPointerException em runtime.

Esse outro só compila se eu colocar o tamanho do array instanciação.

[code] public static void main(String[] args) {

  String teste[] = new String[12];
  
  teste[0]="teste";

}[/code]
Mas se eu for usar isso em um loop onde não sei quantos elementos vou adicionar no array, pode gerar um ArrayOutOfBoundException.

Lembrando que não tenho ideia do tamanho do array na hora de instanciação, e supondo que eu não possa usar uma collection ou coisa do tipo.

Alguém consegue achar uma solução? Será que o java não consegue contornar esse problema?

abração folks…[/quote]

Declaração de array nesse formato tem por obrigação informar o seu respectivo tamanho, seja por um inteiro ou preenchendo o vetor com os seus devidos valores, exemplo:

String[] vet = new String[2];

//ou

String[] words = new String[] {"Joao", "Joaquim"}

Para contornar esse problema há duas soluções:

1 - Utilizar a API Collection, como já foi citado.

2 - Buscar alternativas através de algoritmo para contornar tal problema. Cito criar um array auxiliar para ir alocando os valores de acordo com a necessidade. Tal situação é inclusive explicado em um tópico aqui do GUJ.

Se você não é obrigado a usar array, aconselho fortemente a utilizar a API Collection.
Abraços.