1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java duvida

Discussão em 'Programação' iniciada por luismauricio, 21 de Junho de 2007. (Respostas: 11; Visualizações: 1118)

  1. luismauricio

    luismauricio Power Member

    O seguinte codigo me dá erro, alguem me pode dizer qual o problema:

    public List<Fornecedor> lista = new List<Fornecedor>();

    onde Fornecedor é um objecto.
     
    Última edição: 24 de Junho de 2007
  2. MadOnion

    MadOnion Folding Member

    É um atributo? E se é um atributo, nao faz sentido ser publico, convém que seja privado ou protected, a não ser que queiras divulgar ao cliente esse atributo.
    Melhor maneira de fazer isso:

    PHP:
    import java.util.List;
    import java.util.ArrayList;

    public class 
    MyClass {
        private List<
    Fornecedorlista;

        
    //No construtor da classe
        
    public MyClass () {
             
    lista = new ArrayList<Fornecedor> ();
        }
    }
    Porquê ArrayList e não List? Simples, em java(se List for a interface que estou a pensar), não podes criar instâncias de interfaces, ou seja à esquerda do sinal de igual pode estar uma Interface que define o tipo da variável, à esquerda tem que estar uma classe, mais exemplos:
    Código:
    Map-> Interface
    HashMap ou TreeMap -> Classes;
    
    List-> Interface
    LinkedList, ArrayList, ArrayBlockingQueue -> Classes;
    
    Queue-> Interface
    LinkedList, ArrayBlockingQueue -> Classes;
    
    Tree-> Interface
    BinaryTree, SearchBinaryTree -> Classes;
    
    Um exemplo real:
    Queue<Integer> filaDeCarros = new ArrayBlockingQueue<Integer> (10);
    
    Percebeste a ideia??
    Mais exemplos na API do java, ou Aqui
     
    Última edição: 21 de Junho de 2007
  3. napalm

    napalm Power Member

    Já agora tens de ter o projecto configurado para usar Java 5.0+ para poderes usar generics.
     
  4. luismauricio

    luismauricio Power Member

    Eu fiz o que disseste MadOnion mas não deu. Não percebo o que se passa. Tenho um Objecto

    public Fornecedor(String nome, String morada, String email, int telefone , int fax){}

    depois queria criar uma pilha ou fila ou lista para adicionar e remover Fornecedores para depois gravar em ficheiro, que me recomendam.​

     
  5. MadOnion

    MadOnion Folding Member

    Sim, é preciso ter o Java5 configurado no eclipse.
    De certeza que tens o import das classes e interfaces bem feitas?
    Experimenta então, ArrayList<Fornecedor> lista = new ArrayList<Fornecedor>(); ou então java.util.ArrayList<Fornecedor> lista = new java.util.ArrayList<Fornecedor>();

    Secalhar pode ser um erro do eclipse, experimenta compilar pela consola(linha de comandos).
     
  6. Em resposta ao teu pedido de ajuda, decidi programar um bocadito, e cheguei a qualquer coisa como isto:

    Código:
    public class Fornecedor {
        
        public String nome;
        public String morada;
        public String email;
        public int fax;
        public int telefone;
        /** Creates a new instance of Fornecedor */
        public Fornecedor(String nome, String morada, String email, int fax, int telefone) {
            
            this.nome=nome;
            this.morada=morada;
            this.email=email;
            this.fax=fax;
            this.telefone=telefone;
        }
        
        
        
        
    }
    Código:
    public class Gestao {
        
        private ArrayList<Fornecedor> lista;
        
        /** Creates a new instance of Gestao */
        public Gestao() {
            
            lista = new ArrayList();
            
        }
        
        public void add(Fornecedor f) {
            
            lista.add(f);
        }
        
        public void delete(Fornecedor f) {
            
            int i;
            
            for(i=0; i<lista.size(); i++)
            {
                if(lista.get(i).nome==f.nome)
                {
                    lista.remove(i);
                }
            }
        }
        
        public void print() {
            
            int j;
            
            for(j=0; j<lista.size(); j++)
            {
                System.out.println(lista.get(j).nome + " ");
            }
        }
        
        
        
    }
    Para testar:

    Código:
    public static void main(String[] args) {
            // TODO code application logic here
            
            Fornecedor f1 = new Fornecedor("CTT","Porto","none",254,87);
            
            Fornecedor f2 = new Fornecedor("BTT","Chaves","none",254,87);
            
            Fornecedor f3 = new Fornecedor("BMX","Lisboa","none",254,87);
            
            Gestao g = new Gestao();
            
            g.add(f1);
            
            g.add(f2);
            
            g.add(f3);
            
            g.print();
            
            g.delete(f2);
            
            g.print();
        }
     
  7. napalm

    napalm Power Member

  8. sLiNk

    sLiNk Power Member

    Guardar num ficheiro e carrega-lo no inicio do programa, Scanner e Formatter não servem?
     
  9. Não será mais fácil guardares num ficheiro os fornecedores e depois lê-los a partir do ficheiro e ao mesmo tempo que os lês, vais gravando na ArrayList?
     
  10. luismauricio

    luismauricio Power Member

    Sim era essa a ideia á medida que ia carregando os ficheiros ia passando os fornecedores para a ArrayList. Alguma ideia mais!?!?!?
     
  11. MadOnion

    MadOnion Folding Member

    A unica solução que conheço para passar o estado do objecto num ficheiro para uma estrutura de dados, é a tua classe implementado a interface Serializable.
    O resto está no link supra-citado.

    Por outro lado, se tiveres um ficheiro com do tipo:

    fornecedores.txt
    Código:
    Jose Lisboa [email protected] 9564846 212486
    Miguel Almada [email protected] 9564846 212486
    Antonio Melgaço [email protected] 9564846 212486
    Francisco Funchal [email protected] 9564846 212486
    
    Podes usar um Scanner ou algum outro fluxo de leitura de dados do disco, tipo BufferedReader.

    PHP:
    ArrayList<Fornecedoreslista = new ArrayList<Fornecedores> ();
    Scanner f_in = new Scanner(new FileReader("fornecedores.txt")); //se receberes da linha de comandos, mete args[0]

    while( f_in.hasNext() ); //Enquanto existirem dados no ficheiro
           
    lista.add( new Fornecedor(f_in.next(), f_in.next(), f_in.next(), f_in.nextInt(), f_in.nextInt() );

    f_in.close();
    É uma alternativa.
     
    Última edição: 24 de Junho de 2007
  12. liquido

    liquido Power Member

    uma boa alternativa, como alguém já disse, seria usar um ObjectOutputStream e um ObjectInputStream que basicamente escrevias para um qualquer output stream de um ficheiro o estado actual do(s) objectos que quizesses.

    Mini-exemplo:

    escrever:

    Código:
    FileOutputStreamfos= newFileOutputStream(“foo.out”);
    ObjectOutputStreamoos=newObjectOutputStream(fos);
    oos.writeInt(12345);
    oos.writeObject(“Hoje”);
    oos.writeObject(newDate());
    oos.close();
    fos.close();
    ler:

    Código:
    FileInputStreamfis= newFileInputStream(“foo.out”);
    ObjectInputStreamois= newObjectInputStream(fis);
    inti = ois.readInt();
    Stringhoje = (String) ois.readObject();
    Date data = (Data) ois.readObject();
    ois.close();
    fis.close();
    espero k ajude! :)
     

Partilhar esta Página