[RESOLVIDO]Dúvida sobre vetor de Strings

10 respostas
R

Boa tarde, pessoal.
Gostaria de saber se tem como eu declarar e instanciar um vetor de Strings ou de algum objeto qualquer de um modo mais enxuto do que o demonstrado no código abaixo.

String[] vetor = new String[10]; /// É realmente necessário eu usar este "for" abaixo para instanciar as Strings? for(int i=0; i<vetor.length; i++) { vetor[i] = new String(); }

Muito obrigado.

10 Respostas

R

Nao precisa instancialas, ate porque voce ja faz isso nessa linha:

String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.

R
rof20004:
Nao precisa instancialas, ate porque voce ja faz isso nessa linha:
String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.

Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:

java.lang.NullPointerException

public class Numero
{

      int val;
      float acum;
      public Numero(int val, float acum)
      {
            this.val = val;
            this.acum = acum;
      }
}

// Se eu tentar, no método "main" ou em outro método fazer como no trecho abaixo, dá erro.
Numero vetor[] = new Numero[2];
vetor[0].val = 1;
vetor[0].val = 1.0;

// Para funcionar eu tenho que fazer como está abaixo:
Numero vetor[] = new Numero[2];
vetor[0] = new Numero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.
vetor[0].val = 1;
vetor[0].val = 1.0;
R

A diferenca é que voce esta instanciando a sua propria classe, e nao um tipo primitivo, como é a classe String.

R

Então, quando eu for instanciar um vetor de objetos que eu criei, devo fazer usando algum loop, tipo o “for”?
E se for um vetor de outro tipo de objeto, como String ou outra classe, desde que eu não tenha criado, não há necessidade disso?

Se sim, é estranho, mas OK.

Obrigado.

R

Entao mano, nao sei te explicar profundamente, o que sei é que a classe String, ao voce chamar ou atribuir qualquer valor, ela implicitamente ja faz um cast ou chamada ao construtor.

R

Exemplo:

String nome = “Meu nome”;

Normalmente, um objeto precisaria do new ai para poder ser inicializado, mas veja que com a classe String isso nao é preciso, o que me faz pensar que isso é implicito na API, ou na JVM talvez.

R

Ok, cara, obrigado pelas suas respostas, como isso ainda não me pareceu conclusivo, deixarei o tópico mais um tempo aqui, depois mudarei o título dele para [RESOLVIDO].

E

Não sei por que é que se ensina arrays antes de ensinar listas.

Através do acompanhamento deste fórum, percebi que o conceito de array é muito mais difícil de os iniciantes em programação entenderem, que o conceito de listas. E a linguagem Java, ainda por cima, complica essa situação, ao insistir que os arrays têm tamanho fixo e dado no momento de sua criação.

Tanto é que em algumas linguagens, a lista é um tipo “primitivo” (no sentido que ele é primordial na linguagem) - como no caso do Lisp.

Ivan_Alves
robgeek:
rof20004:
Nao precisa instancialas, ate porque voce ja faz isso nessa linha:
String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.

Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:

java.lang.NullPointerException

public class Numero
{

      int val;
      float acum;
      public Numero(int val, float acum)
      {
            this.val = val;
            this.acum = acum;
      }
}

// Se eu tentar, no método "main" ou em outro método fazer como no trecho abaixo, dá erro.
Numero vetor[] = new Numero[2];
vetor[0].val = 1;
vetor[0].val = 1.0;

// Para funcionar eu tenho que fazer como está abaixo:
Numero vetor[] = new Numero[2];
vetor[0] = new Numero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.
vetor[0].val = 1;
vetor[0].val = 1.0;

robgeek ao tentar fazer isso

Numero vetor[] = new Numero[2];
vetor[0].val = 1;
Na primeira linha você não está instanciando os objetos do vetor e sim declarando seu tamanho, então o código geraria uma exceção de NullPointException ao passar pela segunda linha, simplismente porque você está tentando acessar um objeto que ainda não foi instanciado. Então o certo seria declarar o objeto antes de acessar um método ou variável que ele possui, exemplo:
Numero vetor[] = new Numero[2]; //declara o tamanho do vetor.
vetor[0] = new Numero(); //declara o objeto na posição 0 do vetor
vetor[0].val = 1; //agora você pode acessa-lo já que a referencia está apontando para um objeto criado acima

O mesmo acontece com a String que em Java não é um tipo primitivo.

R

vero, String nao é tipo primitivo, so int float double byte short e outros ae, hehehe, desculpe ^^

Criado 7 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 10
Participantes 4