Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vanilson

listas ligadas

Recommended Posts

Pessoal, começei a estudar listas ligadas a algum tempo atrás e no entanto estou a tentar inserir e visualizar os dados...so que acontece que ao visualizar os dados ele visualiza apenas os dois primeiros, eis o codigo:

 

No.java

public class No
{
  public int valor;
  public No proximo;
}
Oplista.java

import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.awt.*;

public class Oplista extends JFrame implements ActionListener 
{	
	private JButton adicionar, excluir, visualizar, editar;
	String valor_recebido;
	int valor_recebido_convertido,i;
	static No inicio = null;
	static No fim;
	//private JPanel botoes;
	public Oplista()
	{
		super("::..Listas Ligadas..::");
		formulario();
		setVisible(true);
		setSize(250,100);
		setLocationRelativeTo(null);
		setResizable(false);
		//pack();
	}
	public void formulario()
	{
		setLayout(new GridLayout(2,2));
		adicionar = new JButton("Adicionar");
		excluir = new JButton("Excluir");
		visualizar = new JButton("Visualizar");
		editar = new JButton("Editar");
		
		adicionar.addActionListener(this);
		visualizar.addActionListener(this);

		add(adicionar);
		add(excluir);
		add(visualizar);
		add(editar);
		
		getContentPane();
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);		
	}
	
	public void adiciona()
	{
		
		/*fim = inicio;
		if(inicio==null)
			inicio = new No(); //Reserva no espaço de memória caso inicio(Head) esteja vazio
			fim = inicio;
		if(inicio!=null)
		{
			for(i=0;i<=10;i++)
			{
				valor_recebido = JOptionPane.showInputDialog("Insira o valor desejado");
				valor_recebido_convertido = Integer.parseInt(valor_recebido);
				inicio.valor=valor_recebido_convertido;
				inicio.proximo=null;
			}
		}*/
		//System.out.println(inicio.valor);
		No temp;
    		if(inicio == null)
		{
			valor_recebido = JOptionPane.showInputDialog("Insira o valor desejado");
			valor_recebido_convertido = Integer.parseInt(valor_recebido);

      			inicio = new No();
      			inicio.valor = valor_recebido_convertido;
      			inicio.proximo = null;
   		 }
		 else
		 {
      			temp = inicio;
      			// varrer a lista até encontrar o último nó
     			 while(temp.proximo != null)
        			temp = temp.proximo;

      			//último nó encontrado...vamos criar um novo nó agora
      			temp.proximo = new No();
      			// atribui o valor do nó
			for(i=0;i<=10;i++)
			{
				valor_recebido = JOptionPane.showInputDialog("Insira o valor desejado");
				valor_recebido_convertido = Integer.parseInt(valor_recebido);
      				temp.proximo.valor = valor_recebido_convertido;
      				// define o campo proximo do nó como null
      				temp.proximo.proximo = null;
			}
		}

  	}

  	public void visualizar()
	{
    		if(inicio != null)
		{
      			do 
			{
       		 		JOptionPane.showMessageDialog(null,"Os valores da lista são " + inicio.valor);
        			//inicio = inicio.proximo;
      			}
			while(inicio != null);
    		}
    		else
      			JOptionPane.showMessageDialog(null,"A lista está vazia");
 	}
	public void actionPerformed(ActionEvent event)
	{
		if(event.getSource()==adicionar)
		{
			adiciona();
		} 
		else
			if(event.getSource()==visualizar)
			{
				visualizar();
			}
	}
	public static void main(String args[])
	{
		new Oplista();
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda ontem lhe passei a resolução.. a ideia é receber o valor a ser adicionado como argumento e retirar o ciclo dentro do metodo adiciona, desse jeito você só precisará usar o metodo adiciona sempre que precisar, em qualquer ciclo.. não conseguiu usar o código q lhe passei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ritchie, desculpa ai pela demora a responder...O problema foi resolvido da forma que tu falaste, apenas estava a faltar um pouco de atenção... Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara mais a lista ligada, mostra apenas o numero atual e o proximo

se você quiser mostrar ainda o anterior nesse caso seria uma lista duplamente ligada

se quiser eu t arranjo o codigo de uma lista ligada simples pra você ter uma noção de como é

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.