yuribom
Setembro 19, 2008, 3:37pm
#1
eu preciso criar um programa para cadastrar o rg de um numero indeterminado de pessoas e no final
realizar um sorteio e imprimir o rg sorteado, mas na hora de imprimir eu não estou conseguindo, só sai o endereço da memória
[code]public class ListaSimples {
public Nodo prim;
public ListaSimples() {
this.prim = null;
}
public void mostraLista(){
Nodo nodoaux = prim;
while(nodoaux!=null){
nodoaux.mostraNodo();
nodoaux = nodoaux.next;
}
}
public void insereInicio(int elemento){
Nodo novoNodo = new Nodo(elemento);
novoNodo.next = prim;
prim = novoNodo;
}
public boolean isEmpty(){
if(prim==null)
return true;
else
return false;
}
public Nodo removeInicio(){
Nodo nodoaux = prim;
prim = prim.next;
return nodoaux;
}
public void insereFim(int elemento){
if(!isEmpty()){
Nodo nodoaux = prim;
while(nodoaux.next!=null){
nodoaux = nodoaux.next;
}
Nodo novoNodo = new Nodo(elemento);
nodoaux.next = novoNodo;
}
else
insereInicio(elemento);
}
public Nodo removeFim(){
Nodo nodoUltimo = prim;
Nodo nodoAnterior = prim;
while(nodoUltimo.next != null){
nodoAnterior = nodoUltimo;
nodoUltimo = nodoUltimo.next;
}
if(nodoAnterior != nodoUltimo)
nodoAnterior.next = null;
else
prim = null;
return nodoUltimo;
}
public void insere(int elemento, int posicao){
if((posicao == 1)||(prim == null))
insereInicio (elemento);
else{
int contaNodos = 1;
Nodo nodoaux = prim;
while(nodoaux.next != null){
nodoaux = nodoaux.next;
contaNodos++;
}
if(posicao>contaNodos)
insereFim(elemento);
else{
contaNodos = 1;
nodoaux = prim;
while(contaNodos < posicao){
nodoaux = nodoaux.next;
contaNodos++;
}
Nodo novoNodo = new Nodo(elemento);
novoNodo.next = nodoaux.next;
nodoaux.next = novoNodo;
}
}
}
}[/code]
[code]import javax.swing.*;
public class TerceiroT1 {
public static void main(String[] args) {
int cont=0, id=0, i=0, j;
int a[]=new int[999999];
ListaSimples l = new ListaSimples();
while(id != 9999){
cont++;
id=Integer.parseInt(JOptionPane.showInputDialog("informe o numero da identidade: "));
l.insereInicio(id);
i++;
a[i]=id;
}
j=(int)(Math.random()*cont+1);
for(i=1; i<cont; i++){
System.out.println(l.removeInicio());
}
}
}[/code]
thingol
Setembro 19, 2008, 3:41pm
#2
A sua classe Nodo deve definir um método “public String toString()”
yuribom
Setembro 19, 2008, 3:45pm
#3
essa
[code]public class Nodo {
public int dado;
public Nodo next;
public Nodo(int elemento){
this.dado = elemento;
this.next = null;
}
public void mostraNodo(){
System.out.print("\n Dado: "+this.dado + "endereco: " +this.next );
}
}[/code]
como assim
thingol
Setembro 19, 2008, 3:51pm
#4
System.out.println(l.removeInicio());
É a mesma coisa que:
Nodo n = l.removeInicio();
System.out.println (n.toString());
Então você tem de implementar o toString. Não?
yuribom
Setembro 19, 2008, 3:52pm
#5
deixa eu tentar fazer uma coisa
yuribom
Setembro 19, 2008, 4:07pm
#6
[code]import javax.swing.*;
public class TerceiroT1 {
public static void main(String[] args) {
int cont=0, id=0, i=0, j;
ListaSimples l = new ListaSimples();
while(id != 9999){
cont++;
id=Integer.parseInt(JOptionPane.showInputDialog("informe o numero da identidade: "));
l.insereInicio(id);
i++;
a[i]=id;
}
j=(int)(Math.random()*cont+1);
System.out.println(j);
for(i=1; i<j; i++){
l.removeFim();
}
Nodo aux = l.removeFim();
aux.mostraNodo();
System.out.println("\n");
}
}[/code]
minha lista simples ficou assim agora
mas como eu faço para não poder repetir o rg ?
thingol
Setembro 19, 2008, 4:10pm
#7
Você pode criar um método “insere” que seja semelhante a “insereFim”, mas só faz isso se, olhando a lista inteira, não achar alguém com o mesmo RG.
yuribom
Setembro 19, 2008, 4:12pm
#8
na minha lista tem um insere na linha 62.
é isto que voce esta falando
thingol
Setembro 19, 2008, 4:15pm
#9
É isso mesmo. Se você não quer que se repitam, evite que se repitam já na inserção, logo de cara.
yuribom
Setembro 19, 2008, 4:21pm
#10
como assim eu não entendi ?
desculpa minha burrice mas eu estou aprendendo ainda.
thingol
Setembro 19, 2008, 4:28pm
#11
É assim. Você tem uma lista de Nodos.
Um campo desse nodo deve ter o RG (sinto muito, mas não li seu programa inteiro).
Usando uma lógica parecida com aquele método que imprime a lista de nodos, faça um método que acha um nodo com um determinado RG.
Se você achar esse tal nodo, então você NÃO INSERE o nodo, já que você vai acabar tendo um RG repetido se você conseguir inserir.
Senão, você insere.
gpd38
Setembro 20, 2008, 8:52am
#12
Fiz correndo e ainda nao testei.
De uma olhada e melhore.
Existe comparações que nao precisam ser feitas ei fiz a mais
public void insereInicio(int elemento) {
Nodo novoNodo = new Nodo(elemento);
Nodo inicial = prim;
while (inicial != null && inicial != novoNodo && inicial.next != null)
inicial = inicial.next;
if (inicial != novoNodo || inicial.next != novoNodo) {
novoNodo.next = prim;
prim = novoNodo;
}
}