Vector com enhanced for

9 respostas
D

oi pessoal

Minha dúvida é se seria possível utilizar o enhanced for para listar todos os itens inseridos em um Vector().

Tenho uma aplicação cabulosa em que tenho algumas strings dentro de um objeto Vector. Quando tenho que listar estas strings quero utilizar o enhanced for para isto, mas não consegui.

Dai resolvi fazer uns testes bem simples mas não funcionou também. Acho que não é possível fazer o que quero.

Segue ai meus teste que não funcionaram. Se alguem tiver a solução agradeço.

import java.util.Vector;

public class ArrayVector{
   public static void main(String[] args){
      Vector vt = new Vector();
      String a = "aa";
      String b = "bb";
      String c = "cc";
		
      vt.add(a);
      vt.add(b);
      vt.add(c);
		
      //com a String teste deveria funcionar pois o enhanced for pede que esta variável seja do mesmo tipo  
      //dos itens que o Vector ou array são preenchidos.
      for(String teste : vt){
            System.out.println("vt : " +teste);    
      }

      //esse abaixo não deveria funcionar mesmo mas mesmo assim eu testei declarar a var teste do tipo Vector
      //tentei até declarar teste como do tipo Object mas tmb não funciona
      /*for(Vector teste : vt){
            System.out.println("vt : " +teste);
      }*/

      //já o for abaixo funciona normalmente
      for(int i = 0; i < vt.size(); i++){
            System.out.println("vt > " +vt.get(i));
      }

}

o erro é o seguinte:

ArrayVector.java:14: incompatible types
found   : java.lang.Object
required: java.util.Vector
                for(String teste : vt){
                                   ^
Note: ArrayVector.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

9 Respostas

R

Declare o tipo dos elementos do Vector e deve funcionar.

Vector<String> vt = new Vector<String>();
D

valeu Roger

Tentei fazer deste jeito mas não funcionou. Ou eu não estou sabendo fazer. Modifiquei o código e ficou assim.

import java.util.Vector;

public class ArrayVector{
    
    Vector<String> vt = new Vector<String>();                              //ERRO//
    
	public static void main(String[] args){
	
	    ArrayVector av = new ArrayVector();
	    av.metodo();
	}
	
	public void metodo(){
	    
		String a = "aa";
		String b = "bb";
		String c = "cc";
		vt.add(a);
		vt.add(b);
		vt.add(c);
		
		for(String teste : vt){                                                 //ERRO//
		    System.out.println("vt : " +vt.get(i));
		}
		
		for(int i = 0; i < vt.size(); i++){
			System.out.println("vt > " +vt.get(i));
		}
	    
	}
}
edmarr

Voçê deve utilizar a parte de Collections como no post acima , ou um ArrayList por exemplo .

R

Qual a versão da sua JDK? Liste também o erro que você encontrou para analisarmos.

B

Na linha 23 do teu código você está chamando vt.get(i).

Não existe i para chamar aí. Use a String teste.

mrapha

Grande Dio,

seu problema é bem simples de se resolver!!

Siga o exemplo abaixo:

//Declaração do Vetor
Vector<String> nomes = new Vector<String>();

//Preenchimento pra teste
nomes.add("Juca");
nomes.add("João");
nomes.add("Zumira Furacão");

//Varrendo o Vector para recuperar os dados
for(String nome: nomes)
{
        System.out.println(nome);
}

É só isso pra funcionar!
Tenta aí e retorna se aparecer algo!

Abração!!

ViniGodoy

A menos que seu Java seja anterior ao 1.2, você não deveria usar Vector, e sim a classe ArrayList:

Dá uma olhada num exemplo de uso aqui:
http://www.guj.com.br/posts/list/74068.java#389435

No caso do seu código:

import java.util.List;
import java.util.ArrayList;

public class ArrayVector {
    List<String> vt = new ArrayList<String>();
    
   public static void main(String[] args){
      ArrayVector av = new ArrayVector();
      av.metodo();
   }
	
   public void metodo(){
      vt.add("aa");
      vt.add("bb");
      vt.add("cc");
		
      for(String teste : vt){
            System.out.println("vt : " + teste);
      }
		
      for(int i = 0; i < vt.size(); i++){
            System.out.println("vt > " +vt.get(i));
      }	    
   }
}

Lembre-se que o enhanced for foi introduzido a partir do Java 5, assim como os generics que permitem especificar o tipo de dados do vector entre <>

D

oi galera

muito obrigado pelas dicas.

agora funcionou com vector, list e arraylist.

estou agora com um outro problema. uso o eclipse e o jdk 6u14. Quando compilo o código com vector/list/arraylist sendo percorrido por um enhanced for no eclipse, a ide embaça e dá um erro estranho(abaixo). Quando compilo pelo prompt ele roda normal.

//ERRO CABULOSO DA IDE ECLIPSE!!!!
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Syntax error on token "<", invalid AssignmentOperator
	Syntax error on token "=", != expected
	Syntax error on token "<", ( expected
	Syntax error on token "(", invalid Expression
	Syntax error on token(s), misplaced construct(s)
	Syntax error on token ")", : expected

	at ArrayVector.main(ArrayVector.java:18)

Outra pergunta. Objetos Vector são serializaveis?

B

Tenta fazer uma limpeza no projeto e compilar de novo.

Criado 19 de agosto de 2009
Ultima resposta 20 de ago. de 2009
Respostas 9
Participantes 6