Declaração de arrays

5 respostas
F

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.

public static void main(String[] args) {
      
      String teste[];
      
      teste[0]="teste";

   }

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
public static void main(String[] args) {
      
      String teste[] = null;
      
      teste[0]="teste";

   }
Esse código compila, porém gere uma NullPointerException em runtime. Esse outro só compila se eu colocar o tamanho do array instanciação.
public static void main(String[] args) {
      
      String teste[] = new String[12];
      
      teste[0]="teste";

   }
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...

5 Respostas

P

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]

BrunoBastosPJ

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" };
S

Consegue, com o uso de collections :wink:

pispico

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.

nel
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.
public static void main(String[] args) {
      
      String teste[];
      
      teste[0]="teste";

   }

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
public static void main(String[] args) {
      
      String teste[] = null;
      
      teste[0]="teste";

   }
Esse código compila, porém gere uma NullPointerException em runtime. Esse outro só compila se eu colocar o tamanho do array instanciação.
public static void main(String[] args) {
      
      String teste[] = new String[12];
      
      teste[0]="teste";

   }
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...

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.

Criado 30 de janeiro de 2007
Ultima resposta 1 de set. de 2011
Respostas 5
Participantes 6