Vetor passo a passo

Vetor passo a passo

(Parte 1 de 2)

Crie seu arquivo .java e vamos começar a brincadeira.

Primeiro, vamos ver uma forma de declarar vetor em Java. Digite no seu programa (sim, ali no main, como fizemos até hoje, sem traumas):

char[] vet ;

Agora, compile. Process completed? Então ok!

Vamos atribuir um valor a uma posição dele. vet[0]=’A’;

Compile. variable vet might not have been initialized Sem lágrimas. Você consegue traduzir: variable = variável vet = não tente traduzir, por favor. É o nome que você deu ao seu vetor. might = pode not = não have = ter been = sido initialized = inicializado Viu como não dói? Bom, o que isso quer dizer? Quer dizer que antes de usarmos o vetor temos que inicializá-lo. E como se faz isso?

Digite: vet = new char[5];

Note que 5 é o tamanho do vetor. Logo, ele terá as posições de 0 a 4, ok? Compilou? Deu certo né?

Coloque de novo aquela linha: vet[0]=’A’;

Compilou? Ok, deu certo agora. A pergunta que não quer calar: Eu não poderia declarar e inicializar numa só linha? Não sei. Teste aí pra ver sefunciona.

Troque: char[] vet; vet = new char[5]; por char[] vet = new char[5];

Compilou? Deu certo? Então por que me perguntou, se só bastava você testar?

Continuemos. Ahn? O que? Ah, tem outro jeito de declarar vetor, mudando a posição dos colchetes? Tem sim. Teste ali.

char vet[] = new char[5];

O que? Não notou a diferença?

Estava assim: char[] vet = new char[5];

Ficou assim: char vet[] = new char[5];

Pronto, sabemos que os colchetes podem estar ao lado do tipo ou ao lado do nome que demos à variável que conterá o vetor.

Ouvi um zumzumo que é mesmo? E se colocar ao lado dos dois ao mesmo tempo? Humpf!
Nem vou me dar ao trabalho de explicar. Teste aí e me diga depoisHum um!!!!

Também podemos declarar direto, já inicializando com os valores.

Compile agora e veja o que deu. Você já tinha percebido que ia dar errado né? Mas vamos ler o erro: illegal initializer for char

Lembra que em inglês a coisa é de trás pra frente? Então a tradução livre seria algo como: inicializador ilegal para char

Só para lembrar: ali em cima não foi declarado um vetor e sim uma variável do tipo char. Para ser vetor precisamos dos colchetes (ao lado do tipo de dado ou ao lado do nome da variável, lembra? E não, nunca ao lado dos dois ao mesmo tempo, por favor ).

Mude um de seus valores: vet2[3]=’X’;

Imprima o vetor para ver se realmente mudou: System.out.println(vet2);

Surpreso? Confesso que fiquei também. Ele imprimiu!!! Não me pergunte por quê! Estou atônito até agora.

Vamos fazer um outro teste: int vet3[]={1,2,3}; System.out.println(vet3);

O que saiu? 123? Não!! Uma seqüência estranha de caracteres. Pois é. Este é o endereço de vet3 (tem uma longa história sobre vetor ser um objeto, em Java. Tio Jack explicará a vocês, um dia!).

Bom, tentei acreditar que o println entendeu vet2 como sendo uma String e o imprimiu como tal. Ok, mas e se eu quiser o endereço de vet2, não consigo?

Fiz isso e deu certo: System.out.println("Endereço de vet2: "+vet2);

Mas não era isso que eu queria falar agora. Queria mostrar que para imprimir um vetor não dá para usar o System.out.println puramente. Bom, isso até está certo, desde que não seja colocado um vetor de char sozinho dentro do comando. Então lá vai: e para verificar se mudou um vetor de inteiros, por exemplo?

Digamos que fizemos (façam aí, não fiquem no “digamos” não, preguiçosos): vet3[2]=9;

Como saber se mudou?

Vamos precisar “andar” pelo vetor, com um bom e velho for. for(int i=0;i<=3;i++) System.out.println(vet3[i]);

Compilou? Ok, né? Executou? Deu erro, né?

Mensagem? Anda, olha lá. Apareceu isso?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Vetor.main(Vetor.java:18)

Bom, aprenda. Quando aparecer java.lang.ArrayIndexOutOfBoundsException é porque estourou o tamanho de um vetor. Você está tentando acessar posições acima ou abaixo do que existe no vetor. Neste caso, olhe lá na mensagem, você está tentando acessar a posição 3 (vetor de tamanho 3, vai de 0 a 2, lembra? Até lembra né? Mas não prestou atenção no for, não foi?) .

Vamos, modifique-o. Ou tire o igual (do <=), ou vá até 2.

porque ele é atributo e não métodosim, sim, tarefa de mostrar a diferença fica com Tio Jack,

Ah, o vetor, em Java, tem um atributo tamanho: length (assim mesmo, sem parênteses, em POO). Veja como é o comando:

System.out.println(“Tamanho do vetor: ”+ vet3.length);

Então seu for poderia ficar assim: for(int i=0;i<vet3.length;i++) System.out.println(vet3[i]);

Mas voltemos aos vetores vet e vet2. Qual o tamanho de vet, olhando para a declaração e inicialização dele? Cinco, né? E o tamanho de vet2? Hipótese: será que seu tamanho é equivalente à quantidade de valores com o qual foi inicializado?

Hum! Que teste te daria esta resposta rapidamente? Pense: quantos valores foram colocados em vet2? Cinco! Se eu acessar vet2 na posição 4, deve aparecer a letra E.

Testando: System.out.println(vet2[4]);

Resultado: E E se tentarmos vet2 na posição 5? Se não estourar, é porque nossa hipótese está furada.

Testando: System.out.println(vet2[5]); resultado: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:

5 at Vetor.main(Vetor.java:20)

Pelo visto, estourou.

cedo

Bom, é claro que se eu mandasse escrever o tamanho de vet2 já teria esta resposta mais System.out.println(“Tamanho de vet2: ”+ vet2.length);

E pra fechar, vamos voltar a brincar com os endereços dos vetores: System.out.println("Endereço de vet: "+vet); System.out.println("Endereço de vet2: "+vet2); System.out.println("Endereço de vet3: "+vet3);

(Parte 1 de 2)

Comentários