Utilizar ArrayList para fazer uma busca atraves do nome

5 respostas
A

Olá,

Esse programa estava utilizando a classe Vector e estou tentando utilizar a classe ArrayList.
Nao estou conseguindo fazer a parte da busca de informações sobre pessoas através do nome.

Tambem nao entedi no programa que esta usando a classe Vector, esse codigo do programa:

Pessoa p = (Pessoa) pessoas.elementAt(j);

Porque a classe Pessoa esta entre parenteses?

Alguem poderia me ajudar?
Se voces puderem dar algumas sugestoes ou dicas para melhorar o programa, eu agradeço.

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



class Lista {
  String nome;
  String endereco;
  String dataNascimento;
}

class TesteVectorPessoas {
  public static void main(String[] args) {
    ArrayList l = new ArrayList();
    Scanner scan= new Scanner(System.in);
    // armazena varias informações sobre uma pessoa
    while (true) {
    	
      System.out.println("Digite o nome da pessoa a armazenar");
      String nome = scan.next();
      if (nome.length() == 0) {
        break;
      }
      System.out.println("Digite o endereco da pessoa");
      String endereco = scan.next();
      System.out.println("Digite a data de nascimento da pessoa");
      String dataNascimento = scan.next();
      Lista p = new Lista();
      p.nome = nome;
      p.endereco = endereco;
      p.dataNascimento = dataNascimento;
      l.add(p);  
    }

  // busca informações sobre pessoas através do nome  ???

    while (true) {
      System.out.println("Digite o nome da pessoa a buscar");
      String chave = scan.next();
      if (chave.length() == 0) {
        break;
      }
      // buscar as informações sobre a pessoa
      boolean encontrado = false;
      for (int j = 0; j < l.size(); j++) {
       // Lista p = (Lista) l.elementAt(j);
        
        if (l.nome.get(j).equals(chave)) {
          System.out.println("Nome:"+p.nome);
          System.out.println("Endereco:"+p.endereco);
          System.out.println("Nascimento:"+p.dataNascimento);
          encontrado = true;
          break;
        }
      }
      if (! encontrado) {
        System.out.println("Nome não encontrado");
      }
    }
  }
}

O programa que utiliza a classe Vector.

import java.util.Vector;

class Pessoa {
  String nome;
  String endereco;
  String dataNascimento;
}

class TesteVectorPessoas {
  public static void main(String[] args) {
    Vector pessoas = new Vector();
    // armazena varias informações sobre uma pessoa
    while (true) {
      System.out.println("Digite o nome da pessoa a armazenar");
      String nome = IO.readStr();
      if (nome.length() == 0) {
        break;
      }
      System.out.println("Digite o endereco da pessoa");
      String endereco = IO.readStr();
      System.out.println("Digite a data de nascimento da pessoa");
      String dataNascimento = IO.readStr();
      Pessoa p = new Pessoa();
      p.nome = nome;
      p.endereco = endereco;
      p.dataNascimento = dataNascimento;
      pessoas.add(p);  
    }
    // busca informações sobre pessoas através do nome  
    while (true) {
      System.out.println("Digite o nome da pessoa a buscar");
      String chave = IO.readStr();
      if (chave.length() == 0) {
        break;
      }
      // buscar as informações sobre a pessoa
      boolean encontrado = false;
      for (int j = 0; j < pessoas.size(); j++) {
        Pessoa p = (Pessoa) pessoas.elementAt(j);
        if (p.nome.equals(chave)) {
          System.out.println("Nome:"+p.nome);
          System.out.println("Endereco:"+p.endereco);
          System.out.println("Nascimento:"+p.dataNascimento);
          encontrado = true;
          break;
        }
      }
      if (! encontrado) {
        System.out.println("Nome não encontrado");
      }
    }
  }
}
class IO {
    private static final short MAX_INPUT_LEN = 256;
    private static byte[] bytes = new byte[MAX_INPUT_LEN];
    private static char[] caracts = new char[MAX_INPUT_LEN];
    public static String readStr () {
        for (int i = 0; i < MAX_INPUT_LEN; i++) {
            bytes[i] = '\n';
        }

        try {
            // os dados são capturados do teclado
            System.in.read(bytes, 0, MAX_INPUT_LEN);
        }
        catch (Exception e) {
            System.out.println(e);
            // um string null é retornado em caso de erro 
            return null;
        }
        int qtdBytesDigitados = MAX_INPUT_LEN;
        // cada um dos bytes é examinado
        for (int i = 0; i < MAX_INPUT_LEN; i++) {
            // copia os bytes ateh que um caractere de retorno <enter> seja encontrado
            if (bytes[i] == '\n') {
              qtdBytesDigitados = i;
              break;
            }
            caracts[i] = (char) bytes[i];
        }
        // um string é criado com os caracteres encontrados até o '\n'
        String str = (new String(caracts, 0, qtdBytesDigitados-1));
        return str;
    }
    // retorna um inteiro lido do teclado
    public static int readInt() {
        // usa a string retornada por readStr(), removendo os caracteres em branco
        String str = readStr().trim();
        // converte a string para inteiro
        return (Integer.parseInt(str));
    }
    public static short readShort() {
        // le um inteiro no teclado e o converte para um short
    	return (short) readInt();
    }    
    public static double readDouble(){
        // usa a string retornada por readStr(), removendo os caracteres em branco
        String str = readStr().trim();
        // converte a string para ponto flutuante de dupla precisão
        return (Double.parseDouble(str));
    }
    public static float readFloat(){
        // lê um double do teclado e o converte para float
        return (float)readDouble();
    }
    public static void readEnter () {
        // le um string qualquer até encontrar o enter
        readStr();
    }
    public static void println(String str) {
        // atalho para System.out.println
    	System.out.println(str);
    }
    public static void println(Object obj) {
        // atalho para System.out.println
    	System.out.println(obj);
    }
    public static void print(Object obj) {
    	System.out.print(obj);
    }
    public static void println(int numero) {
    	System.out.println(numero);
    }
    public static void print(int numero) {
    	System.out.print(numero);
    }
    public static void main(String[] args) {
        println("Testando IO");

        println("Digite um string e tecle <enter>");
        String s = IO.readStr();
        println("O string digitado foi["+s+"]");

        println("Digite um inteiro e tecle <enter>");
        int i = IO.readInt();
        println("O int digitado foi["+i+"]");

        println("Digite um short e tecle <enter>");
        short sh = IO.readShort();
        println("O short digitado foi["+sh+"]");

        println("Digite um float e tecle <enter>");
        float f = readFloat();
        println("O float digitado foi["+f+"]");

        println("Digite um double e tecle <enter>");
        double d = readDouble();
        println("O double digitado foi["+d+"]");

        println("Tecle <enter> para encerrar o programa");
        readEnter();
        println("Fim do teste");
    }
}

5 Respostas

V

Oi,

você pode percorrer um Arraylist usando Iterator.
Da uma olhada nesse link http://www.athanazio.pro.br/?p=723

:wink:

tRuNkSnEt

Olá,

Cara, no seu caso indico fortemente aprender como usar as Coleções Java, mais ainda ler sobre o Java básico.

Neste link abaixo segue um resumo sobre as do framework de coleções do Java.
http://www.javafree.org/javabb/viewtopic.jbb?t=847654

Isso é o famoso cast. Como o método elementAt() retorna um Object e você espera um objeto do tipo Pessoa é necessário fazer essa conversão de tipo.

Até,

G

Bom dia AlunoJava!

Onde vc pergunta “Porque a classe Pessoa esta entre parenteses?”
Isso eh um cast, de uma pesquisada sobre isso.
Outra ciosa que vc pode dar uma pesquisada eh sobre Generics.
Da uma olhada no link sugerido pela Vanessa tambem.

O que esta acontecendo de errado?

A linha onde faz o cast vc comentou, o programa pelo menos compila?

A

Obrigado pessoal pela ajuda e pelas dicas.
VanessaBA e Eliezer Reis valeu pelos link que me passaram e pela explicaçao sobre cast.

A

Obrigado pessoal pela ajuda e pelas dicas.
VanessaBA e Eliezer Reis valeu pelos link que me passaram e pela explicaçao sobre cast.

Criado 18 de setembro de 2007
Ultima resposta 20 de set. de 2007
Respostas 5
Participantes 4