Hellblazzer Posted March 8, 2009 at 07:32 PM Report Share #249222 Posted March 8, 2009 at 07:32 PM Boas pessoal. Estou a começar a trabalhar com listas ligadas em Programação orientada a objectos na faculdade. Estou à toa com a sintax das listas. Percebi o conceito e como funciona mas nos slides que os profs dão há exemplos assim. public class A { private Lista salas; public A() { for (int i = 0; i != 10; ++i){ Sala s = new Sala(“C60” + i); salas.add(s); } } public void mostraSalas(){ while (salas.hasNext()) { System.out.println((Sala)salas.next()); } } } Eu estou a tentar perceber isto e a fazer um exemplo só para me entender, usando tipo uma lista de Carros: package Listas; import java.util.List; public class carros { private String marca; private String modelo; public String getMarca() { return marca; } public String getModelo() { return modelo; } public carros(String marca, String modelo) { this.marca = marca; this.modelo = modelo; } public void mostra() { System.out.println(toString()); } public List carros; public void insereCarros() { for (int i = 0; i != 10; ++i){ carros c = new carros("Ford" , "Fiesta"); carros.add(c); //Aqui não consigo usar o add. } } public void mostraCarros(){ while (carros.hasNext()) { System.out.println((carros)carros.next()); //Não consigo usar o next } } } Falta-me algum import? Também já li no slide que podem ser precisos iteradores... mas para ser sincero não percebi o que são nem o que fazem. Alguém me pode ajudar a perceber como usar as listas? É que tenho um trabalho para fazer, e não tenho horário de dúvidas até lá... Se me derem código para criar a lista do tipo de dados carro, inserir novos carros na lista, apagar o 1º ou o escolhido e mostrar... Sei que pode parecer pedir muito mas eu ficava mesmo muito agradecido e sei que há gente aqui para quem isto é básico... Obrigado e cumprimentos Link to comment Share on other sites More sharing options...
Knitter Posted March 8, 2009 at 08:14 PM Report Share #249230 Posted March 8, 2009 at 08:14 PM As listas, ou outras estruturas de dados em Java, podem ser percorridas com ciclos for, usando os índices, com iteradores, que é a forma mais comum até ao Java 5, ou com o ciclo foreach, que foi introduzido no Java 5 e que pode ser mais compacto e simples de usar, internamente, o ciclo recorre a iteradores. Tirando o acesso por índices, que é simples de perceber e que raramente é usado, a forma mais comum são os iteradores. Iteradores não são mais que mecanismos de acesso aos dados da lista sem te darem acesso à estrutura interna da lista, são mecanismos genéricos, que todas as estruturas têm, não é apenas das listas, e que permitem percorrer a estrutura e aceder aos seus elementos. Permitem acções como remoção de elemento corrente mas cujo seu uso desaconselho vivamente. Ora um iterador é um objecto da classe Iterator, para usares um iterador de uma estrutura basta usares o método dessa estrutura que te fornece o iterador. Depois, o iterador tem um método que te diz se existem elementos e outro que te permite obter um elemento e passar para a posição seguinte da lista, onde pode ou não existir outro elemento. Um exemplo simples do uso de iteradores: LinkedList listaLigada = new LinkedList(); listaLigada.add("Elemento 1"); listaLigada.add("Elemento 2"); listaLigada.add("Elemento 3"); listaLigada.add("Elemento 4"); listaLigada.add("Elemento 5"); Iterator it = listaLigada.listIterator();// obter o iterador desta lista while(it.hasNext()) { System.out.println(it.next()); //avançar para o próximo elemento e imprimir o seu valor. } Um iterador inicia sempre na posição antes do primeiro elemento da lista, quase como se iniciasse em -1, e só avança quando invocares o método next(), nessa altura o iterador avança para o elemento a seguir e devolve-o. Não há muito mais a dizer sobre iteradores, o que código que coloquei é o exemplo típico e que deve ser o mais usado em toda a programação com listas em Java. Quanto a listas, estou a usar um tipo de lista standard do Java, a LinkedList, que implementa uma lista ligada simples, pelo que vi no teu tópico, parece-me que estás a usar listas entregues pelos teus professores, podem existir algumas diferenças pontuais nos métodos e formas de funcionamento. Ainda em relação a listas, tem atenção que não podes modificar uma lista enquanto a percorres, podes modificar os elementos mas não podes adicionar novos ou remover existentes, a estrutura da lista não pode mudar enquanto a mesma é percorrida. É uma restrição da plataforma e terás excepções se o tentares fazer. Bem, isto foi uma resposta escrita um pouco de "rajada" e pode não ser muito explicito, se precisares de mais explicações é só perguntar. www.sergiolopes.eu Link to comment Share on other sites More sharing options...
Betovsky Posted March 8, 2009 at 09:38 PM Report Share #249263 Posted March 8, 2009 at 09:38 PM Só para adicionar ao bom post do Knitter. No teu caso não funciona porque a tua lista não está instanciada. No exemplo do teu prof, é omitida essa parte e portanto também não deverá funcionar. Basicamente posto, se não crias a lista (algo tipo "carros = new Lista();") não tens a dita lista, ela não existe. Obviamente se a lista não existe, não podes adicionar elementos ou percorrer os mesmos. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
Hellblazzer Posted March 9, 2009 at 02:56 PM Author Report Share #249395 Posted March 9, 2009 at 02:56 PM Boas, Muito obrigado pela disponibilidade. Não foi de rajada, achei bastante esclarecedor até. LinkedList listaLigada = new LinkedList(); listaLigada.add("Elemento 1"); listaLigada.add("Elemento 2"); //.... Iterator it = listaLigada.listIterator();// obter o iterador desta lista while(it.hasNext()) { System.out.println(it.next()); //avançar para o próximo elemento e imprimir o seu valor. } "Aproveitando" o código... Tendo a classe Carro() criada agora assim: package Listas; import java.util.List; public class Carro { private String marca; private String modelo; public String getMarca() { return marca; } public String getModelo() { return modelo; } public Carro(String marca, String modelo) { this.marca = marca; this.modelo = modelo; } } Como posso fazer mesmo para criar uma lista de dados do tipo Carro? É que ao olhar para esse código não percebo como associar a lista aos carros em si... 😛 Link to comment Share on other sites More sharing options...
Hellblazzer Posted March 9, 2009 at 04:42 PM Author Report Share #249422 Posted March 9, 2009 at 04:42 PM Pessoal já consegui tirar a dúvida. Um prof sempre pôde dar-me 1 minutos. Aqui o objectivo não era usar já mesmo linked lists, mas sim usar uma lista normal e fazermos nós os Nós das listas "manualmente" para primeiro perceber como funciona um linked list. Fiquei com: Carro.java: package Listas; public class Carro { private String marca; private String modelo; public String getMarca() { return marca; } public String getModelo() { return modelo; } public Carro(String marca, String modelo) { this.marca = marca; this.modelo = modelo; } public void mostra() { System.out.println(toString()); } public String toString() { return marca + " " + modelo; } } Stand.java (funciona como o main...): package Listas; import java.util.Scanner; public class Stand { public static void main(String[] args) { Scanner teclado = new Scanner(System.in); String marcatmp, modelotmp; ListaDeCarros lista = new ListaDeCarros(); System.out .println("Introduza a Marca do veículo a inserir: "); marcatmp = teclado.next(); System.out .println("Introduza o modelo do veículo a inserir: "); modelotmp = teclado.next(); Carro carro = new Carro(marcatmp, modelotmp); lista.add(carro); carro = new Carro("Seat", "Ibiza"); lista.add(carro); lista.mostraCarros(); } } E o ListaDeCarros.java: package Listas; //import java.util.Iterator; //import java.util.LinkedList; import java.util.List; public class ListaDeCarros { private No primeiro = null; private class No { private Carro item; private No seguinte; public No(final Carro item, final No seguinte) { this.item = item; this.seguinte = seguinte; } public Carro getItem() { return item; } public No getSeguinte() { return seguinte; } } public void add(Carro o) { if(primeiro == null){ primeiro = new No(o, null); return; } No corrente = primeiro; while (corrente.seguinte != null) { corrente = corrente.seguinte; } corrente.seguinte = new No(o, null); } public void mostraCarros() { No corrente = primeiro; while (corrente != null) { System.out.println((Carro) corrente.getItem()); corrente = corrente.seguinte; } } } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now