View Full Version : problemi in java
allora..
sto programmando in java, ambiente jbuilder 6..
ho creato la mia bella classe con i relativi metodi e costruttore..
ora in un'altra classe ho creato un oggetto di questa classe e su di esso devo lanciare i metodi relativi alla classe dell'oggetto e quindi scrivo nomeoggetto.nomemetodo ma il compilatore per alcuni metodi non protesta mentre per altri mi dice di non trovarli nella classe in cui li ho implementati.. Infatti quando digito il punto, nella finestra ke si apre e ke m fa vedere tutti i metodi, non compaiono proprio quelli ke il compilatore non trova, mentre gli altri si... Xke?
Cosa ho sbagliato!!!
:help: :mc:
potrebbe dipendere dal fatto chei metodi non sono public; posta il codice.
Si tratta di implementare il tipo d dato lista, la lista è formata da vari nodi collegati tra loro:ogni nodo o link ha un campo element ke contiene il dato e un campo next ke punta al link successivop.
I metodi ke danno problemi sono size, insertLast e deleteLast.
Questa è la classe ke testa i metodi implementati:
package implementazione_di_uno_stack;
import implementazione_di_uno_stack.ArrayStack;
import javax.swing.JOptionPane;
import java.lang.Object;
public class classe_testante {
public static void main(String[] args)
{
LinkList lista = new LinkList(); //Crea nuova lista
Link head = new Link(); //Crea il primo nodo della lista
Link tail = new Link(); //Crea l'ultimo nodo della lista
String num_oggetti_input_lista =
JOptionPane.showInputDialog("Oggetti da inserire nella lista?");
int num_oggetti_lista = Integer.parseInt(num_oggetti_input_lista);
for (int i=0; i < num_oggetti_lista; i++)
{
String oggetto_inserito_input =
JOptionPane.showInputDialog("Inserisci l'elemento successivo");
Object o = oggetto_inserito_input;
lista.insertFirst(o); //Inserisce tutti i link inseriti dall'utente
}
System.out.println("La lista ha" + lista.size() + "elementi");
System.out.println("L'head è " + head.getElement() + " e il suo successore è " +
head.getNext() + ",l'ultimo è " + tail.getElement());
head.setElement("sono il primo elemento");
System.out.println("L'elemento del primo nodo è stato sostituito con" + head.getElement());
head.setNext(tail);
System.out.println("Il Next del primo nodo è stato sostituito con l'ultimo che è:" + tail.getElement());
System.exit(0); //Vengono usati tutti i metodi
}
}
Questa è la classe Link x implementare i link d cui è composta la lista:
package implementazione_di_uno_stack;
class Link
{
public Object element;
public Link next;
public Link (Object e, Link n) //Ogni link ha un elemento e un puntatore al prossimo link
{
element = e;
next = n;
}
public Link ()
{
this(null, null);
}
public Object getElement() //Restituisce l'elemento del link
{
return element;
}
public Link getNext() //Restituisce il link successivo
{
return next;
}
public void setElement(Object newElement) //Imposta un nuovo elemento al posto di quello precedente
{
element = newElement;
}
public void setNext(Link newNext) //Imposta un nuovo link successivo al posto di quello ke c'era prima
{
next = newNext;
}
}
Questa è la classe LinkList x implementare la lista completa:
package implementazione_di_uno_stack;
public class LinkList
{
public Link head; // riferimento al primo link della lista
public Link tail; // riferimento all'ultimo link della lista
public int size = 0; //la taglia dela coda all'inizio è 0
public void LinkList()
{
head = null;
tail = null; // ancora nessun link nella lista
}
public boolean isEmpty() //vrifica se la lista è vuota o meno
{
return (head == null);
}
public void insertFirst(Object e) // inserimento all'inizio della lista
{
Link newLink = new Link(e, head);
head = newLink;
size ++;
}
public Link deleteFirst() // cancellazione all'inizio della lista
{
Link temp = head;
head = head.next;
size --;
return temp;
}
public int size(LinkList lista) //restituisce il numero di link nella lista
{
int j = lista.size;
return j;
}
public void insertLast(Object e) //inserimento alla fine
{
Link newLink = new Link(e, null);
tail.next = newLink;
tail = newLink;
size ++;
}
public Link deleteLast() //cancellazione alla fine
{
Link current = head;
int i = 0;
while(i!= size() - 1){
if(current.next == null)
throw new StackEmptyException("no");
else
current = current.next;
i++;
}
current.next=null;
tail = current;
}
}
Grazie dell'aiuto...
Ciao..
Posta l'erore che ti da il compilatore; vist che i metodi sono public forse hai sbgliato il tipo degli argomenti
"LinkList.java": Error #: 300 : method size() not found in class implementazione_di_uno_stack.LinkList at line 52, column 22
e
"classe_testante.java": Error #: 300 : method size() not found in class implementazione_di_uno_stack.LinkList at line 123, column 47
Sostituisci il metodo
public int size(LinkList lista) //restituisce il numero di link nella lista
{
int j = lista.size;
return j;
}
con
public int size() //restituisce il numero di link nella lista
{
return size;
}
come avevo supposto sbagliavi a chiamare il metodo perche l'hai dichiarato con un argomento, mentre lo invocavi senza argomenti; quindi togli l'argomento dalla dichiarazione, anche perche è inutile, size deve ritornare la dimensione di questa lista, non di una passata come argomento.
ho fatto la modifica e funziona ma ho sempre il problema ke quando digito "lista" nella finestra non compaiono quei metodi ke t ho elencato...
Ora so ke il codice è un po una palla però sono sempre in attesa d nuove notizie..
Ciao
;)
Praticamente il programma gira ma non riesco a capire xke nella finestra ke appare quando digito "lista." non c sono i metodi size ,deleteLast e insertLast...
Ho il dubbio ke dipende dal fatto ke, visto ke il codice ke ho postato è solo una parte xke nella classe test c sono altre righe ke implementano altre classi ke xo non ho postato xke con loro non ho problemi.. Praticamente ho fatto questa operazione:
Ho creato dal codice ke avevo fatto fino a quel punto due nuove classi(LinkList e Link) inserendo al loro interno tramite un copia-incolla il codice presente in un'altro programma ke aveva queste classi.Poi nella classe test ho aggiunto il codice x implementare i metodi di tali classi. Ora la clase LinkList l'ho modificata cancellando qualche metodo(ke continua ad apparire nella finestra) e aggiungendone altri(proprio quelli ke non appaiono nellla finestra)..
Perchè si comporta così?
Ripeto:il programma gira ma xke questo comportamento?
sarà un problmea di jbuilder
ora va bene grazie
xo xke il deleteLast m lancia questa eccezione "java.lang.NullPointerException"?
il codice l'ho leggermente modificato, è questo:
public void deleteLast() //cancellazione alla fine
{
if(isEmpty()){
throw new StackEmptyException("no");}
else if((head.getNext() == null) &&(tail.getNext() == null)){
head = null;
tail = null;
System.exit(0);}
Link current = head;
int i = 0;
while(i!= size() - 1){
current = current.getNext();
i++;
}
current.next = null;
tail = current;
}
vedi un po se puoi darmi una mano...
Ci sto sbattendo da ore ma niente...
Non riesco a capire xke me la lancia... mah!
:muro: :muro:
Inserisci una
System.out.println("\n x");
dopo ogni riga del metodo che ti dà problemi, dove x rappresenta un numero che fai aumentare di rifa in riga, cosi puoi individuare la riga in cui hai l'eccezione; inolter metti anche un'istruzione di stampa dentro il while per contare qunte volte esegui il ciclo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.