Oi pessoal, estou com um exercicio aqui e preciso de ajuda mesmo. Semana passada faltei uma aula importante e meu professor mandou me virar, nem ajudou. Fora que minha universidade só me entregou o material dessa materia ontem e eu tenho um exercicio para entregar hoje. Então venho aqui pedir muito a ajuda de vocês. Não consigo contatar meus colegas de turma para ajudar, porque mais uma “excelencia” do professor é que ele estimula os alunos a não se ajudarem (não reparem, to meio chateado com ele, até pq estou numa universidade paga e ele deveria me ensinar. Não faltei por vagabundagem ).
Aqui vai o exercicio, esta bem auto explicativo.
Main.java
package Exercicios;
import javax.swing.*;
public class Main {
public static void main (String args[]) {
Lista lista = new Lista();
int dado = -1;
while ( dado != 0 ) {
dado = Integer.parseInt(JOptionPane.showInputDialog(
" 1 - incluir novo elemento no inicio da lista\n" +
" 2 - incluir novo elemento no final da lista\n" +
" 3 - contar o numero de elementos da lista\n" +
" 4 - incluir novo elemento em local especifico da lista\n" +
" 5 - remover elemento no inicio da lista\n" +
" 6 - remover elemento no final da lista\n" +
" 7 - remover elemento em posição especifica na lista\n" +
" 8 - listar todos os dados de todos os elementos da lista\n" +
" 9 - encontrar pessoa na lista\n" +
" 11 - listar teste"));
switch (dado) {
case 1:
lista.inserirInicio(lista.leitura("Valor a ser inserido no inicio"));
//System.out.println(lista.listar());
lista.saidaTeste();
break;
case 2:
lista.inserirFim(lista.leitura("Valor a ser inserido no fim"));
lista.saidaTeste();
break;
case 3:
break;
case 11:
lista.listar();
break;
}
}
}
No.java
package Exercicios;
public class No {
private int valor;
private No proximo;
public No() {
setValor(0);
setProximo(null);
}
public No(int pNovo, No pProximo) {
setValor(pNovo);
setProximo(pProximo);
}
public void setValor(int pNovo) {
valor = pNovo;
}
public void setProximo(No pNovo) {
proximo = pNovo;
}
public int getValor() {
return valor;
}
public No getProximo() {
return proximo;
}
}
Lista.java
package Exercicios;
import javax.swing.*;
public class Lista {
private No inicio;
public Lista() {
setInicio(null);
}
public Lista(No pInicio) {
inicio = pInicio;
}
public String listar() {
if (getInicio() != null) {
String saida = "";
No proximo = getInicio();
while (proximo != null) {
saida = saida + ", " + proximo.getValor();
proximo = proximo.getProximo();
}
return saida.substring(1);
} else {
return "Lista vazia";
}
}
public No getInicio() {
return inicio;
}
public void setInicio(No pNovo) {
inicio = pNovo;
}
public int leitura(String args) {
return Integer.parseInt(JOptionPane.showInputDialog(args));
}
public void inserirFim(int pNovo) {
No novo = new No();
novo.setValor(pNovo);
novo.setProximo(getInicio());
setInicio(novo);
}
public void removerFim() {
No atual, temp;
if (getInicio() != null) {
atual = getInicio();
if (atual.getProximo() != null) {
while (atual.getProximo().getProximo() != null) {
atual = atual.getProximo();
}
temp = atual.getProximo();
atual.setProximo(null);
} else {
temp = getInicio();
setInicio(null);
}
temp = null;
} else {
JOptionPane.showMessageDialog(null, "Lista vazia");
}
}
public void inserirInicio(int pNovo) {
//No temp;
No novo = new No();
novo.setValor(pNovo);
novo.setProximo(getInicio());
novo.setProximo(novo);
novo.setValor(0);
setInicio(novo);
}
public void removerInicio() {
No atual;
if (getInicio() != null) {
atual = getInicio();
if (atual.getProximo() != null) {
setInicio(atual.getProximo());
}
atual = null;
}
}
public void saidaTeste() {
System.out.println("Valor No atual: " + inicio.getValor() + " | "
+ "ID Proximo = " + inicio.getProximo() + " | ID Atual ="
+ this.inicio);
}
}
Desculpa a ignorância é que estou começando mesmo em programação. Minha duvida, isso é um exemplo de lista encadeada, certo?
A classe No e Lista foi a que perdi na aula passada, consegui com um colega. Eu estou com problemas nessa rotina abaixo, acho que esta me faltando entender o que deve ser feito:
Lista.java
...
public void inserirInicio(int pNovo) {
//No temp;
No novo = new No();
novo.setValor(pNovo);
novo.setProximo(getInicio());
novo.setProximo(novo);
novo.setValor(0);
setInicio(novo);
}
...
O que eu to pensando é o seguinte, eu adiciono um valor ao “No novo”(novo.setValor(pNovo))e depois eu tenho que passar esse valor para o “No proximo” (novo.setProximo(novo)) e apagar o valor do “No novo”(novo.setValor(0)), preferiria deixar em null, mas parece que não dá.
O problema que estou tendo nesse caso é que na segunda vez que adiciono no inicio da lista, o ID do “No proximo” esta com o mesmo ID do “No atual”, quando o “No proximo” deveria ter o ID da inserção anterior.
Através dessa rotina:
Listar.java
...
public void saidaTeste() {
System.out.println("Valor No atual: " + inicio.getValor() + " | "
+ "ID Proximo = " + inicio.getProximo() + " | ID Atual ="
+ this.inicio);
}
...
Se alguem puder me ajudar eu agradeço.
vlw