Como faço para o objeto realLista aparecer na na jTextArea.
ListaLigada realLista = new ListaLigada();
Para mostra no painel de console é só colocar assim: realLista.MostrarLista(); que aparece.
Mais e na jTextArea?
Como faço para o objeto realLista aparecer na na jTextArea.
ListaLigada realLista = new ListaLigada();
Para mostra no painel de console é só colocar assim: realLista.MostrarLista(); que aparece.
Mais e na jTextArea?
Vc pega o nome da variavel do campo JTextArea e manda setar o texto nele pelo setText(“valor”);
Ex.:
jtextarea.setText(realLista.MostrarLista());
;
Já fiz isso só que dá o seguinte erro:
‘void’ type not allowed here
Mostra o que este metodo faz. Se ele é void então retorna nada, vc vai setar nada?
É o código de uma lista encadeada
[code]class No
{
int elemento;
No prox;
No (int elem){
elemento = elem;
prox = null;
}
}
class ListaLigada
{
No primeiro, ultimo;
ListaLigada ()
{
primeiro = null;
ultimo = null;
}
public boolean ListaVazia()
{
if (primeiro == null && ultimo == null)
{
return true;
}
return false;
}
public void InserirInicio(No novoNo)
{
if (ListaVazia())
{
ultimo = novoNo;
}
else
{
novoNo.prox = primeiro;
}
primeiro = novoNo;
}
public void InserirFinal(No novoNo)
{
if (ListaVazia())
{
primeiro = novoNo;
}
else
{
ultimo.prox = novoNo;
}
ultimo = novoNo;
}
public int ContarNos()
{
int tamanho = 0;
No NoTemp = primeiro;
while (NoTemp !=null)
{
tamanho = tamanho+1;
NoTemp = NoTemp.prox;
}
return tamanho;
}
public void InserirMeio(No NovoNo, int posicao)
{
No NoTemp = primeiro;
int NroNos, posAux = 1;
NroNos = ContarNos();
if(posicao <= 1)
{
InserirInicio(NovoNo);
}
else
{
if (posicao > NroNos)
{
InserirFinal(NovoNo);
}
else
{
while (posAux < (posicao -1))
{
NoTemp = NoTemp.prox;
posAux = posAux + 1;
}
NovoNo.prox = NoTemp.prox;
NoTemp.prox = NovoNo;
}
}
}
public void Remover(int elemento)
{
No NoTemp = primeiro;
No NoAnt = null;
if (primeiro.elemento == elemento)
{
primeiro = primeiro.prox;
}
else
{
while (NoTemp !=null && NoTemp.elemento != elemento)
{
NoAnt = NoTemp;
NoTemp = NoTemp.prox;
}
if(NoTemp != null)
{
NoAnt.prox = NoTemp.prox;
}
if(NoTemp == ultimo)
{
ultimo = NoAnt;
}
}
}
public void ElementoInicio()
{
if(!ListaVazia())
{
System.out.println("O primeiro elemento "+primeiro.elemento);
}
else
{
System.out.println("Lista ligada vazia");
}
}
public void ElementoFinal()
{
if(!ListaVazia())
{
System.out.println("O ltimo elemento "+ultimo.elemento);
}
else
{
System.out.println("Lista ligada vazia");
}
}
public No BuscarNo (int elemento)
{
int i = 1;
No NoTemp = primeiro;
while (NoTemp !=null)
{
if(NoTemp.elemento == elemento)
{
System.out.println("No "+ NoTemp.elemento + " posicao " +i);
return NoTemp;
}
i = i +1;
NoTemp = NoTemp.prox;
}
return null;
}
public void MostrarLista()
{
int i = 1;
No NoTemp = primeiro;
while (NoTemp !=null)
{
System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
NoTemp = NoTemp.prox;
i = i +1;
}
}
}
[/code]
O seu mostrar lista é do tipo void…
Lógico que ele não vai ter retorno… Então ele não vai colocar nada do jTextArea…
Vai ficar algo do tipo:
(Não testei pq não tenho nenhuma IDE aki)
[code] public String[] MostrarLista()
{
int i = 1;
int cont = 0;
No NoTemp = primeiro;
String [] lista;
while (NoTemp !=null)
{
System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i + "\n";
cont = cont +1;
NoTemp = NoTemp.prox;
i = i +1;
}
return lista;
} [/code]
Ele vai retornar a lista, que vai ser colocada no jTextArea…
Só complementando o que o Pedro disse, mesmo vc fazendo esse método retornar um String[] vc terá de criar um loop e inserir cada elemento individualmente no jTextArea…
ok?
Na hora que eu pedir para listar os resultados na jTextArea o código fica como?
Assim?
[code] for(int i=0;i<realLista.ContarNos();i++)
{
//O que eu coloco aqui?
}[/code]
>
[quote=Ziguifrid]Na hora que eu pedir para listar os resultados na jTextArea o código fica como?
Assim?
[code] for(int i=0;i<realLista.ContarNos();i++)
{
//O que eu coloco aqui?
}[/code]
>[/quote]
Axo que vai ficar algo do tipo:
[code]ListaLigada realLista = new ListaLigada();
String [] pegalista = realLista.MostrarLista();
for(int i=0;i<pegalista.size();i++) { //não sei se é size ou lenght (nao to com nenhuma ide aki)
jTextArea.setText(jTextArea.gettext() + pegalista[i]);
}[/code]
Coloquei este código:
[code] String [] pegalista = realLista.MostrarLista();
for(int i=0;i<pegalista.length;i++) { //não sei se é size ou lenght (nao to com nenhuma ide aki)
jTextArea1.setText(jTextArea1.getText() + pegalista[i]);
}[/code]
Deu este erro:
Elemento 1 posicao 1
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at teste.ListaLigada.MostrarLista(No.java:194)
at teste.Principal.jButton6ActionPerformed(Principal.java:269)
at teste.Principal.access$500(Principal.java:22)
at teste.Principal$6.actionPerformed(Principal.java:104)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 22 segundos)
Só uma coisa, você me passou este código em uma resposta anterior:
[code]public String[] MostrarLista()
{
int i = 1;
int cont = 0;
No NoTemp = primeiro;
String [] lista;
while (NoTemp !=null)
{
System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i + "\n";
cont = cont +1;
NoTemp = NoTemp.prox;
i = i +1;
}
return lista;
}[/code]
Estava dando erro na linha:
String [] lista;
Dizia que a variável não podia ser inicializada.
Então eu fiz isso:
String [] lista=null;
Está errado isso aí em cima?
Já que o erro apontado na primeira linha é:
at teste.ListaLigada.MostrarLista(No.java:194)
Que é exatamente está linha:
lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i + "\n";
>
em lista[cont] = "Elemento " etc etc
você está tentando usar a variável lista, que aqui: “String [] lista=null” você declarou como null.
Lembre-se que vetores em java são sempre objetos, por tanto você precisa iniciar ele antes de usar
coloque String[] lista = new String[100]; por exemplo.
Legal CrOnNoS funcionou.
Agora mais uma coisa.
Tem como eu pegar o tamanho da minha lista e jogar no lugar do 100 do exemplo que você passou, ou seja, não pré-determinar um tamanho.
String[] lista = new String[100];
Você pode deixar pra criar o vetor apenas depois de ter certeza do seu tamanho (não pode utilizar ele antes disso neste caso).
Se você precisa usar o vetor antes de saber o seu tamanho, então você precisa de um vetor dinâmico.
Em java você tem estruturas de dados de tamanho dinâmico através das Collection. ArrayList no caso é uma Collection que tem o mesmo comportamento do vetor que você estava usando mas de tamanho dinâmico. Então bastaria criar ele com:
List lista = new ArrayList();
Veja como não precisa especificar tamanho porque a implementação das Collection já cuida disso.
E tem como pegar os valores do objeto realLista e transportar para um ArrayList?
ListaLigada realLista = new ListaLigada();
Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?
E se não tiver como pegar os valores do objeto realLista e transportar para um ArrayList, tipo eu farei um código assim para pegar os valores:
O código abaixo seria para gravar os valores.
List<Integer> ln = new ArrayList<Integer>();
n=Integer.parseInt(jTextField2.getText());
ln.add(Integer.valueOf(n));
jTextField2.setText("");
O problema é que o código para gravar é assim:
try{
n=Integer.parseInt(jTextField2.getText());
realLista.InserirFinal(new No(n));
jTextField2.setText("");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,"Insira um número.");
}
Como vou fazer a função:
realLista.InserirFinal(new No(n));
Ser chamada usando o método de inserir valores em uma ArrayList?
“Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?”
Não entendi bem qual problema que apareceu agora.
O ArrayList funciona exatamente como o vetor mas é dinâmico, para substituir seu vetor basta:
Pelo que eu entendi CrOnNoS você está sugerindo que eu use apenas a ArrayList para adicionar valores e remover.
Só que a pergunta é:
Como usar uma ArrayList e usar ao mesmo tempo também o código da lista encadedada, que eu postei em uma resposta acima.
Por isso que eu perguntei se tem como pegar os valores do objeto realLista e transportar para um ArrayList?
Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?
Digo isso por que para usar o código do quicksort para ordenar valores eu usei o seguinte código.
[code]List ln = new ArrayList();
Integer vetor[];
vetor = new Integer[ln.size()];
for(int i=0;i<ln.size();i++)
{
vetor[i] = ln.get(i);
}
QuickSort> qs = new QuickSort();
qs.sort(vetor);
for(int i=0;i<ln.size();i++)
{
System.out.println(vetor[i]);
}[/code]
Frente disso surgiu a dúvida:
Como adicionar valores a ArrayList e ao mesmo tempo chamar a função (InserirFinal)?
Já que no modo que está agora o código para adicionar valores é:
[code]try{
n=Integer.parseInt(jTextField2.getText());
realLista.InserirFinal(new No(n));
jTextField2.setText("");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,"Insira um número."); [/code]
Que no caso chama está função do código da lista encadeada:
public void InserirFinal(No novoNo)
{
if (ListaVazia())
{
primeiro = novoNo;
}
else
{
ultimo.prox = novoNo;
}
ultimo = novoNo;
}
>
Como eu dissee…
Podia ter uns errinhos, já que eu tava sem IDE…
O importante é que foi resolvido…
[quote=pedroroxd]Como eu dissee…
Podia ter uns errinhos, já que eu tava sem IDE…
O importante é que foi resolvido…[/quote]
É isso aí, valeu pela ajuda.