1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Adicionar dados em ArrayList via Scanner

Boa noite pessoal! Eu desejo saber como adicionar valores, como por exemplo, Strings em um ArrayList conforme o usuário vá digitando, por exemplo, nomes. Na Internet só há aquele jeito simplório de adicionar usando vários add ou com base em um vetor previamente preenchido. Eu tentei fazer esse código, mas o array só preenche um item, independentemente de quantos nomes forem informados. O código que fiz é o que segue:

1 - Classe main


import java.util.Scanner;

public class ClasseDriver
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);
      Relatorio relatorio = new Relatorio();

      int opcao, q = 0;

      while(true)
      {
         System.out.println("\n Escolha uma das seguintes opções:\n\n"
                           +" 1 - Inserir nome\n"
                           +" 2 - Consultar dados\n"
                           +" 3 - Sair\n");

         System.out.print(" Opção escolhida: ");
         opcao = scan.nextInt();

         switch(opcao)
         {
            case 1:
               scan.nextLine();
               System.out.print("\n Nome: ");
               relatorio.setNome(scan.nextLine());
            break;
            case 2:
               System.out.println(" ______________________________");
                System.out.println(" --------- RELATÓRIO ---------");
               System.out.println(" ______________________________");
               System.out.println(" " + relatorio.listagem());
               System.out.println(" ______________________________\n\n");
               System.exit(0);
            break;
            case 3:
               System.exit(0);
            break;
            default:
               System.out.println(" Opção inexistente! Tente novamente.\n\n");
         }
      }
   }
}

2 - Classe relatório


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

public class Relatorio
{

   private String nome;
   int qtde = 0;

   public String getNome()
   {
      return nome;
   }

   public void setNome(String nome)
   {
      this.nome = nome;
   }

   public String listagem()
   {  
      ArrayList<String> nomes = new ArrayList<String>();
      nomes.add(getNome());
      System.out.println("\n tamanho: " + nomes.size());
      return Arrays.toString(nomes.toArray());
   }

}

Como se pode notar, o array está na classe relatório e é preenchido via getNome().

Podem me dizer o que há de errado no código ou como fazer isso da forma mais correta? Bom, é para fins de aprendizagem. Desde já agradeço!

Bom, eu resolvi chamando o método da classe Relatório e inserindo os valores por lá via objeto Scanner. O problema nisso é que o campo nome (atributo) e seus métodos acessores deixam de fazer sentido e o código parece muito deselegante. Vejam como ficou:

01 - ClasseDriver (main)


import java.util.Scanner;

public class ClasseDriver
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);
      Relatorio relatorio = new Relatorio();

      int opcao;

      while(true)
      {
         System.out.println("\n Escolha uma das seguintes opções:\n\n"
                           +" 1 - Inserir nome\n"
                           +" 2 - Consultar dados\n"
                           +" 3 - Sair\n");

         System.out.print(" Opção escolhida: ");
         opcao = scan.nextInt();

         switch(opcao)
         {
            case 1:
               relatorio.listagem(1);
            break;

            case 2:
               System.out.println(" ______________________________");
               System.out.println("           RELATÓRIO           ");
               System.out.println(" ______________________________");
               System.out.printf(" " + relatorio.listagem(2) + "\n");
               System.out.println(" ______________________________\n\n");
               System.exit(0);
            break;

            case 3:
               System.exit(0);
            break;

            default:
               System.out.println(" Opção inexistente! Tente novamente.\n\n");
         }
      }
   }
}

02 - Classe Relatorio


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

public class Relatorio
{
   List<String> nomes = new ArrayList<String>();
   Scanner scan = new Scanner(System.in);

   private String nome;

   /**Métodos acessores*/
   public String getNome()
   {
      return nome;
   }

   public void setNome(String nome)
   {
      this.nome = nome;
   }

   public List<String> listagem(int p)
   {  
         if(p == 1)
         {
            System.out.print("\n Nome: ");
            nomes.add(scan.nextLine());
         }

      return nomes;
   }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags arrays arraylist ou faça a sua própria pergunta.