package poo2.colecoes;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.jar.Attributes;
public class Exemplo4 {
private static Attributes nomes = new Attributes();
public static void main(String[] args) {
int opcao;
Scanner input;
do {
// mostra um menu
System.out.println("=== escolha uma opção === ");
System.out.println("1 - adicionar nome");
System.out.println("2 - remover nome");
System.out.println("3 - visualizar ArrayList");
System.out.println("4 - sair");
System.out.println("informe uma opção >-> ");
input = new Scanner(System.in);
opcao = input.nextInt();
switch(opcao){
case (1):{
System.out.print("Digite o nome que será adicionado: ");
Scanner inputValue = new Scanner(System.in);
String nome = inputValue.next();
adicionar(nome);
break;
}
case (2):{
System.out.print("Informe o nome que será removido ");
Scanner inputRemovedValue = new Scanner(System.in);
String nomeRemovido = inputRemovedValue.next();
remover(nomeRemovido);
break;
}
case (3):{
visualizar();
break;
}
case (4):{
System.out.println("finalizando programa... ");
break;
}
default: {
System.out.println("opção inválida!!!");
break;
}
}
} while (opcao != 7);
}
private static void adicionar(String n){
// passo 1 - adiciona o objeto String dentro do array
nomes.putValue(n,n);
System.out.println("'" + n + "' adicionado com sucesso!\n");
}
private static boolean remover(String objetoRemover){
// paso 2 - remover
nomes.remove(objetoRemover);
return true;
}
public static void visualizar(){
System.out.println("\n...........\nArrayList nomes.\ntamanho: " + nomes.size());
Collection collection = nomes.values();
while (collection.iterator().hasNext()){
System.out.println(collection.iterator().next());
}
System.out.println("\ndigite qualquer tecla para continuar...\n");
IO.readStr(); // apenas para dar uma pausa
}
}
O código acima descreve uma estrutura de armazenamento de dados, que aparentemente deveria funcionar, mas ao visualizar o registro o programa entra em um ciclo de repetição que nao acaa mais.
Alguem sabe o que está acontecendo.
Agradeço a quem responder.
fica preso no metodo visualizar() ?
Olha onde vc está pecando feio:
while (collection.iterator().hasNext())...
Você está toda hora pegando o iterator da lista e vendo se existe próximo(Primeiro registro).
Novamente pega de novo o iterator da lista e ve se existe o proximo(Primeiro Registro.)…
e vai vai vai…
Vc tem q fazer:
Iterator iter = collection.iterator();
while(iter.hasNext())...

Abraço.
[quote=fabiozoroastro]Olha onde vc está pecando feio:
while (collection.iterator().hasNext())...
Você está toda hora pegando o iterator da lista e vendo se existe próximo(Primeiro registro).
Novamente pega de novo o iterator da lista e ve se existe o proximo(Primeiro Registro.)…
e vai vai vai…
Vc tem q fazer:
Iterator iter = collection.iterator();
while(iter.hasNext())...

Abraço.[/quote]
Err, bem segui seus conselhos e fiz:
public static void visualizar(){
System.out.println("\n...........\nArrayList nomes.\ntamanho: " + nomes.size());
Collection collection = nomes.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(collection.iterator().next());
}
System.out.println("\ndigite qualquer tecla para continuar...\n");
IO.readStr(); // apenas para dar uma pausa
}
Mas não resolveu, acontece sempre a mesma coisa.

Yes, perfeitamente meu bom homem.
[quote=gp7junior][quote=fabiozoroastro]Olha onde vc está pecando feio:
while (collection.iterator().hasNext())...
Você está toda hora pegando o iterator da lista e vendo se existe próximo(Primeiro registro).
Novamente pega de novo o iterator da lista e ve se existe o proximo(Primeiro Registro.)…
e vai vai vai…
Vc tem q fazer:
Iterator iter = collection.iterator();
while(iter.hasNext())...

Abraço.[/quote]
Err, bem segui seus conselhos e fiz:
[code]public static void visualizar(){
System.out.println("\n…\nArrayList nomes.\ntamanho: " + nomes.size());
Collection collection = nomes.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
// pode tirar "collection.iterator()", desnecessario
// System.out.println(collection.iterator().next());
// so que assim ele retorna um Object, nao sei vai imprimir o conteudo correto..
System.out.println( iterator.next() );
}
System.out.println("\ndigite qualquer tecla para continuar...\n");
IO.readStr(); // apenas para dar uma pausa
}[/code]
Mas não resolveu, acontece sempre a mesma coisa.
[/quote]
Testa ai…
[quote][quote]
Mas não resolveu, acontece sempre a mesma coisa.
[/quote]
Testa ai…[/quote]
public static void visualizar(){
System.out.println("\n...........\nArrayList nomes.\ntamanho: " + nomes.size());
Collection collection = nomes.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("\ndigite qualquer tecla para continuar...\n");
IO.readStr(); // apenas para dar uma pausa
}
agora sim funcionou.

Mas vc ainda está dando o next no iterator do collection toda hora.
while (iterator.hasNext()){
System.out.println(collection.iterator().next());
}
vc tem que fazer:
while (iterator.hasNext()){
//AQUI OH...
System.out.println(iterator.next());
}
Agora resolverá com certeza;

[quote=fabiozoroastro]Mas vc ainda está dando o next no iterator do collection toda hora.
while (iterator.hasNext()){
System.out.println(collection.iterator().next());
}
vc tem que fazer:
while (iterator.hasNext()){
//AQUI OH...
System.out.println(iterator.next());
}
Agora resolverá com certeza;
:)[/quote]
É verdade. Desculpe não tinha prestado atenção nesse detalhe.
Valeu muito obrigado
Aproveitando o tópico, gostaria de uma ajuda também em outro problema referente a esse mesmo progrma.
As saidas System.ou.println() não estão se comportando de forma devida.
Ao digitar a opção 1, inserir registro, antes eh necessario vc digitar o elemento a ser inserido, pra depois vc ver a mensagem: “Insira um nome:”.
Quando era pra estar ocorrendo o inverso.
[code]
package poo2.colecoes;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.jar.Attributes;
public class Exemplo4 {
private static Attributes nomes = new Attributes();
/** <String> acima especifica ao HashSet que ele trabalhará
* com objetos do tipo String. O seu uso não é obrigatório, logo,
* o trecho acima poderia ser declarado da seguinte forma:
* private static HashSet nomes = new HashSet();
*/
public static void main(String[] args) {
int opcao;
Scanner input;
do {
// mostra um menu
System.out.println("=== escolha uma opção === ");
System.out.println("1 - adicionar nome");
System.out.println("2 - remover nome");
System.out.println("3 - visualizar ArrayList");
System.out.println("4 - sair");
System.out.println("informe uma opção >-> ");
input = new Scanner(System.in);
opcao = input.nextInt();
switch(opcao){
case (1):{
System.out.print("Digite o nome que será adicionado: ");
Scanner inputValue = new Scanner(System.in);
String nome = inputValue.next();
adicionar(nome);
break;
}
case (2):{
System.out.print("Informe o nome que será removido ");
Scanner inputRemovedValue = new Scanner(System.in);
String nomeRemovido = inputRemovedValue.next();
remover(nomeRemovido);
break;
}
case (3):{
visualizar();
break;
}
case (4):{
System.out.println("finalizando programa... ");
break;
}
default: {
System.out.println("opção inválida!!!");
break;
}
}
} while (opcao != 7);
}
private static void adicionar(String n){
// passo 1 - adiciona o objeto String dentro do array
nomes.putValue(n,n);
System.out.println("'" + n + "' adicionado com sucesso!\n");
}
private static boolean remover(String objetoRemover){
// paso 2 - remover
nomes.remove(objetoRemover);
return true;
}
public static void visualizar(){
System.out.println("\n...........\nArrayList nomes.\ntamanho: " + nomes.size());
Collection collection = nomes.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("\ndigite qualquer tecla para continuar...\n");
IO.readStr(); // apenas para dar uma pausa
}
}[/code]