Estou começando a programar na linguagem Java, e em uma das atividades propostas por meu professor da faculdade, estou com uma dificuldade. Vou tentar explicar:
Quando crio um vetor padrão como: int [] vetor = new int[10], consigo percorrer todas as posições do vetor declarando uma variável (int i), e a colocando em um loop. Dessa maneira posso comparar (através do método .equals()) o nome que o usuário digitou com os nomes armazenados no vetor.
A dúvida é…como fazer isso usando a Classe Vector.
Você pode fazer assim se o Vector for parametrizado:
Vector<Integer> vetor = new Vector<Integer>();
for (Integer elemento : vetor) {
//faça alguma coisa
System.out.println(elemento);
}
Ou assim se não for:
Vector vetor = new Vector();
Iterator it = vetor.iterator();
while (it.hasNext()){
//faça alguma coisa
System.out.println(it.next());
}
Qualquer dúvida posta aí! :thumbup:
Vlw mesmo…
acho q fico com a segunda, pois estou guardando dentro do Vector valor do tip Cliente(um classe criada).
Bom…se naum eh abusar soh gostaria de entender melhor o q foi feito…tipo o q eh Interator…e o método usado na estrutura de repetição…
soh para conhecimento…
vlw mesmo…show esse forum…eh minha primeira vez…mas caralho…resposta prontamente…vlw mesmo…
Olha só, no primeiro exemplo, eu parametrizei o Vector, quer dizer que eu defini que tipo de Objeto ele vai conter. Já que vc está usando uma classe do tipo Cliente, vc pode fazer o seguinte:
Vector<Cliente> vetor = new Vector<Cliente>();
Sacou? assim vc pode usar o for do primeiro exemplo, no caso:
for ( Cliente elemento : vetor )
Esse for “varre” o Vector, passando por todos os elementos, um por um.
O Iterator é um objeto usado para percorrer alguns tipos de Collections (Vector, Arraylist) que não estejam parametrizadas. Quando eu faço:
Iterator it = vetor.iterator()Eu pego o iterator para percorrer pelo Vector vetor. A linha:
while ( it.hasNext() )Verifica se Iterator encontrou mais elementos, e a linha:
System.out.println(it.next());Imprime o elemento encontrado pelo Iterator.
Tá compreendido? Qualquer coisa já sabe! :thumbup:
Saquei…caraca…estou aprendendo mais aki do q na facul…srsrs
tah entendi tudo muito bem…
ficou mais ou menos assim (desculpa a ignorancia se estiver errado…):
public void buscarCliente(String nomeDoCliente)
{
Cliente cliente;
Iterator it = cadastro.iterator();
while (it.hasNext())
{
if (nomeDoCliente.equals(cliente.nome));
//System.out.println(it.next());
JOptionPane.showInputDialog("Cliente encontrado");
}
}//Fim do método buscarCliente
mas houve um erro de compilação…
cannot find symbol class Interator
vou tentar ver se parametrizando consigo…
ah…jah q estou abusando…a condição na estrutura de repetição soa meio diferente da habitual…pode explicar…??
Cara, só uma coisa, já que vc é novo no fórum, dá uma lida nesse post: http://www.guj.com.br/posts/list/50115.java
que te ensina à formatar seu código usando recursos do fórum e essas coisas, blz?
O erro é pq vc não importou a classe Iterator, onde vc importou a classe Vector, coloque a seguinte linha:
import java.util.Iterator;
Aí vai funcionar. Sobre a estrutura de repetição, qual vc não entendeu, a paramtrizada ou a outra?
Vlw…
fiz da primeira forma…parametrizando…e deu certo…
tah ae:
public void buscarCliente(String nomeDoCliente)
{
//Percorre todo o Vector
for (Cliente cliente : cadastro)
{
//Compara o nome digitado pelo usuário com o nome de cada posição do Vector
if (nomeDoCliente.equalsIgnoreCase(cliente.nome))
{
JOptionPane.showMessageDialog(null, “Cliente encontrado”);
}
}
}//Fim do método buscarCliente
compilei e executei…e consegui achar o cliente…
a única dúvida ainda persiste na sintaxe da condição do for…um pouco diferente…
Ok, agora que você entendeu… sem querer complicar…
A classe Vector é antiga e a sun recomenda que não seja mais usada.
No lugar use a classe ArrayList que é quase igual.
Você declara um ArrayList assim:
List<Cliente> clientes = new ArrayList<Cliente>();
Para adicionar um cliente:
clientes.add(umCliente);
Para pegar um cliente
Cliente cliente = clientes.get(indice);
Para limpar a lista:
clientes.clear;
O seu método de busca ficaria, com o List, praticamente igual:
public void buscarCliente(String nomeDoCliente)
{
Cliente cliente;
Iterator it = cadastro.iterator();
while (it.hasNext())
{
if (nomeDoCliente.equals(cliente.nome));
//System.out.println(it.next());
JOptionPane.showInputDialog("Cliente encontrado");
}
}//Fim do método buscarCliente
Ou, no caso do Java 5, você poderia usar um for-each:
public void buscarCliente(String nomeDoCliente)
{
for (Cliente cliente : cadastro)
{
if (nomeDoCliente.equals(cliente.nome));
//System.out.println(it.next());
JOptionPane.showInputDialog("Cliente encontrado");
}
}//Fim do método buscarCliente
quando vc tem:
hashNext() - ele verifica se existe mais de 1 elemento, porem ele nao referencia ao proximo elemento…
next() - ele mostra o elemento atual e em seguida referencia ao proximo… com o for aprimorado simplifica o uso do Iterator como vc viu nos codigos acima…
Iterator<Tipo> it = lista.iterator();
//enquanto tive elemetos
while(it.hashNext()){
Tipo x = it.next();
System.out.println(x);
é isso apenas… um das maneira de implementacao…
Agora vou apenas completar o que o vinny falou a respeito da classe Vector o uso dela tb foi depreciado em programas onde a sincronização nao influencia no resultado final… e isso vc pode testar… por exemplo faça um codigo com Vector e outra com LinkedList e perceba se o desempenho vai ser o mesmo…