Προς το περιεχόμενο

java <identifier> expected


Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

Τώρα αρχίζω να μαθαίνω για συνδεδεμένες λίστες και κάνω διάφορους πειραματισμούς.Παρακάτω υποτίθεται οτι δημιουργώ μια λίστα με 4 κόμβους οι οποίοι περιέχουν από 1 όνομα.

η κλάση κόμβος

>public class Node {
   public Object data;
   public Node next;
   public Node (Object d)
   {
       data=d;
       next=null; 
   }
   public Node getNode() {
   return next;
}
   public void setNode(Node x)
   {
       next=x;  
   }
   public Object getObject()
   {
       return data;
   }
   public void setObject(Object x)
   {
       data=x;
   }
}

 

και η κλάση που δημιουργώ τους 4 κόμβους

 

>public class LinkedList {
   Node head=new Node("Mitsos");
   head.next=new Node("Takis");
   head.next.next=new Node("Lakis");
   head.next.next.next=new Node("Alekos");
  
   
}

 

την πρώτη την έκανα compile μια χαρά,αλλά στην δεύτερη (την LinkedList)μου βγάζει το εξής σφάλμα:

<identifier> expected head.next=new Node("Takis");

<identifier> expected head.next.next=new Node("Lakis");

<identifier> expected head.next.next.next=new Node("Alekos");

3 errors

 

δεν μπορώ να το διορθώσω (και παίζει να είναι τπτα απλό),οπότε κάθε βοήθεια ευπρόσδεκτη.

Δημοσ.

Το πιο πιθανό που συμβαίνει αυτό είναι διότι δεν τα έχεις βάλει σε κάποιο initialization block. Δοκίμασε να τα βάλεις μέσα σε constructor πχ

 

>
public class LinkedList {
       public LinkedList() {
           Node head=new Node("Mitsos");
           head.next=new Node("Takis");
           head.next.next=new Node("Lakis");
           head.next.next.next=new Node("Alekos");
       } 
}

Δημοσ.

Το πιο πιθανό που συμβαίνει αυτό είναι διότι δεν τα έχεις βάλει σε κάποιο initialization block. Δοκίμασε να τα βάλεις μέσα σε constructor πχ

 

>
public class LinkedList {
       public LinkedList() {
           Node head=new Node("Mitsos");
           head.next=new Node("Takis");
           head.next.next=new Node("Lakis");
           head.next.next.next=new Node("Alekos");
       } 
}

Ωραίος ευχαριστώ!Τώρα κάνει μια χαρά compile.

Γιατί όμως να απαιτεί constructor;Kάποιος κανόνας θα υπάρχει στην java που μου διαφεύγει...

(μήπως δεν μπορούμε να διαχείριστουμε έτσι μεταβλήτλές στιγμιοτύπου οι οποίες είναι αντικείμενα?)

Δημοσ.

Γιατί πας να δηλώσεις τιμές σε πεδία μίας κλάσης και όχι ενός αντικειμένου.

 

Άλλο η κλάση άλλο το αντικείμενο.

 

 

Δοκίμασε να δεις και με static πεδία ότι θα δουλέψει όπως το έχεις, χωρίς constructor.

 

 

Υ.Γ. Επίσης, είναι λάθος να έχεις public τα πεδία του Node. Ο χρήστης θα πρέπει να προσπελαύνει τα πεδία αυτά αποκλειστικά και μόνο με τις μεθόδους της κλάσης Node και όχι χύμα.

 

Άρα κάνε private τα πεδία data και next.

Δημοσ.

Ok ευχαριστώ παιδιά το κατάλαβα.Το next είναι (μη δημιουργημένο) αντικείμενο της Node γι αυτό υπάρχει και λάθος (ενώ με constructor είναι σωστό).Οπότε ούτε με static πεδία δουλεύει (το δοκίμασα).

Το ξέρω οτι είναι κακή πρακτική να κάνω τα πεδία public αλλά ήθελα να δοκιμάσω τον κώδικα που βρήκα από ένα βιντεάκι στο youtube στο 4:45 :mrgreen:

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...