pavlos1908 Δημοσ. 10 Νοεμβρίου 2015 Δημοσ. 10 Νοεμβρίου 2015 Καλησπερα, σε συνεχεια αυτου του θεματος: Εχω να φτιαξω εναν πινακα 4 θεσεων, οπου καθε θεση απο τις 4 θα δειχνει στον πρωτο κομβο μιας απλα συνδεδεμενης ταξινομημενης λιστας ( 4 λιστες εχουμε συνολο, για αυτο και οι 4 θεσεις του πινακα ). Εχω καταλαβει και εχω δοκιμασει το οτι εστω οτι εχω μια λιστα List με κομβους Node, ο πινακας θα ειναι πχ: List.Node[] A = new List.Node[4]. και εχω μια μεθοδο getHead στην κλαση της λιστας οπου μου επιστρεφει τον πρωτο κομβο καθε φορα. Ομως παραδειγματος χαριν ο κωδικας List a = new List(); List b = new List(); List c = new List(); List d = new List(); A[0] = a.getHead(); A[1] = b.getHead(); A[2] = c.getHead(); A[3] = d.getHead(); Αυτο δεν μου δουλευει ομως και η αληθεια ειναι οτι εχω μπερδευτει πολυ στο πως θα κανω αυτην την αναθεση που πρεπει. Εχω φτιαξει την κλαση της ταξινομημενης απλα συνδεδεμενης λιστας, και μπορω και λυνω το προβλημα χωρις την λυση του πινακα απλα χρησιμοποιωντας την a,b,c,d λιστες που χρειαζομαι. Ομως η εργασια απαιτει την χρηση του πινακα, οποτε...Καθε βοηθεια ευπροσδεκτη!
albNik Δημοσ. 10 Νοεμβρίου 2015 Δημοσ. 10 Νοεμβρίου 2015 Η getHead() δεν επιστρέφει List.Node άλλα object. http://jse.sourceforge.net/doc/api/net/sf/jse/List.html#getHead()
pavlos1908 Δημοσ. 10 Νοεμβρίου 2015 Μέλος Δημοσ. 10 Νοεμβρίου 2015 Η getHead() δεν επιστρέφει List.Node άλλα object. http://jse.sourceforge.net/doc/api/net/sf/jse/List.html#getHead() Την getHead την εχω φτιαξει εγω και επιστρεφει Node. Δεν χρησιμοποιησα καποια ετοιμη. Παρερμηνευτικα Δεν εχει κανεις καμια ιδεα πως θα κανω αυτο που μου ζητειται;
anacondium Δημοσ. 10 Νοεμβρίου 2015 Δημοσ. 10 Νοεμβρίου 2015 Καταρχάς, σου πετάει κάποιο error όταν το τρέχεις ή κάτι άλλο; αν μας πεις θα μπορέσουμε να βοηθήσουμε. Δεύτερο, αν θυμάμαι καλά, η List.Node είναι εσωτερική κλάση της List και δεν θα πρεπε με τίποτα να την χρησιμοποιήσεις. Ίσως εκεί είναι το πρόβλημά σου.
Aztec Δημοσ. 10 Νοεμβρίου 2015 Δημοσ. 10 Νοεμβρίου 2015 Κάτι τέτοιο ? ArrayList<Νode> t =new ArrayList(); t.add(a.getHead); t.add(a.getHead); t.add(a.getHead); t.add(a.getHead); Η κάτι τέτοιο ? Node[] p=new Node[4]; p[0]=a.getHead; p[1]=a.getHead; p[2]=a.getHead; p[3]=a.getHead; άσχετο αλλά το List a = new List(); δεν πρόκειται να σου κάνει compile
pavlos1908 Δημοσ. 10 Νοεμβρίου 2015 Μέλος Δημοσ. 10 Νοεμβρίου 2015 Συγνωμη αλλα ξεχασα να αναφερω οτι δεν επιτρεπεται να χρησιμοποιησουμε ArrayList. Επισης, η κλαση List ειναι μια κλαση που εχω φτιαξει εγω, και το List() αποτελει εναν constructor που εχω φτιαξει εγω. Μεσα στην κλαση List εχω την κλαση Node που εχει μεσα της τα στοιχεια που θελω να υπαρχουν σε καθε κομβο της λιστας. Επισης, δεν μου πεταει καποιο error στους 2 κωδικες που αναφερω στο πρωτο ποστ, απλα δεν μου δουλευει οπως πρεπει, εγω αυτο που θελω ειναι καθε θεση του πινακα ( 0-3 ) να δειχνει στον πρωτο κομβο της αντιστοιχης λιστας ( a - d ). Τονιζω το να δειχνει, οχι να ισουται, διοτι αυτο λεει η ασκηση και απο οτι καταλαβαινω εφοσον θελει να δειχνει, θα μπορουμε μεσω του πινακα να εχουμε προσβαση σε ολοκληρη την λιστα.
Aztec Δημοσ. 10 Νοεμβρίου 2015 Δημοσ. 10 Νοεμβρίου 2015 Το προγραμμά σου παίζει . Έκανα ενα proof of concept με μια custom LinkedList να γυρνάει Node και πήρα την τιμή απο το δεύτερο στοιχείο της λίστας χωρίς πρόβλημα LinkedList1<Integer> a = new LinkedList1(); a.add(1); a.add(2); a.add(3); LinkedList1.Node<Integer> []t=new LinkedList1.Node[4]; t[0]=a.getHead(); System.out.println(t[0].next.item); Η ερώτηση βέβαια είναι τι θα γίνει σε περίπτωση που αφαιρέσουμε το πρώτο στοιχείο απο την λίστα ...
pavlos1908 Δημοσ. 11 Νοεμβρίου 2015 Μέλος Δημοσ. 11 Νοεμβρίου 2015 Δεν ξερω ακριβως την υλοποιηση ουτε τι κανει αυτο για να ειμαι ειλικρινης: <Integer> Τελος παντων, οριστε ενα τμημα του κωδικα που εχω γραψει σε μορφη τεστ, μηπως βοηθησει καπως: Η κλαση: public class List { public class Node { protected int a; protected int b; protected int c; protected int[] choices = new int[3]; protected Node next; public Node(int cc, int aa, int dd, int p1, int p2, int p3, Node next1) { a = cc; b = aa; c = dd; choices[0] = p1; choices[1] = p2; choices[2] = p3; next = next1; } } private Node head; public List() { head = null; } public void addToStart(int c, int a, int d, int p1, int p2, int p3) { head = new Node(c,a,d,p1,p2,p3, head); } public Node getHead() { return head; } public class Listiterator { private Node position; private Node previous; public void addHere(int c, int age, int d, int p1, int p2, int p3) { if(position == null && previous != null) { previous.next = new Node(c,a,d,p1,p2,p3,null); } else { Node temp = new Node(c,a,did,pid1,pid2,pid3,position); previous.next = temp; previous = temp; } } public int getC() { return position.cid; } public Listiterator() { position = head; previous = null; } public void restart() { position = head; previous = null; } public String next() { String toReturn = ""; toReturn += Integer.toString(position.c); toReturn += " "; toReturn += Integer.toString(position.a); toReturn += " "; toReturn += Integer.toString(position.d); toReturn += " "; toReturn += Integer.toString(position.choices[0]); toReturn += " "; toReturn += Integer.toString(position.choices[1]); toReturn += " "; toReturn += Integer.toString(position.choices[2]); previous = position; position = position.next; return toReturn; } public void goNext() { previous = position; position = position.next; } public int hasNext() { if(position != null) return 1; else return 0; } public int hasNextone() { if(position.next != null) return 1; else return 0; } } public Listiterator iterator() { return new Listiterator(); } } και ενα TEST για να εισαγουμε στην λιστα με ταξινομημενο τροπο: public class test { static List list1 = new List(); static List.Listiterator i1 = list1.iterator(); static List list2 = new List(); static List.Listiterator i2 = list2.iterator(); static List list3 = new List(); static List.Listiterator i3 = list3.iterator(); static List list4 = new List(); static List.Listiterator i4 = list4.iterator(); static List.Node[] listes = new List.Node[4]; public static int letter_received(int c, int a, int d, int p1, int p2, int p3) { listes[0] = list1.getHead(); listes[1] = list2.getHead(); listes[2] = list3.getHead(); listes[3] = list4.getHead(); if(a<=3) { i1.restart(); if(i1.hasNext() == 0) { list1.addToStart(c, a, d, p1, p2, p3); } else { while(i1.hasNext() == 1) { if(i1.getC() < c) { if(i1.hasNextone() == 0) { i1.goNext(); i1.addHere(c, a, d, p1, p2, p3); } else i1.goNext(); } else list1.addToStart(c, a, d, p1, p2, p3); } } } else if (a<=7) { i2.restart(); if(i2.hasNext() == 0) { list2.addToStart(c, a, d, p1, p2, p3); } else { while(i2.hasNext() == 1) { if(i2.getC() < c) { if(i2.hasNextone() == 0) { i2.goNext(); i2.addHere(c, a, d, p1, p2, p3); } else i2.goNext(); } else list2.addToStart(c, a, d, p1, p2, p3); } } } else if (a<=11) { i3.restart(); if(i3.hasNext() == 0) { list3.addToStart(c, a, d, p1, p2, p3); } else { while(i3.hasNext() == 1) { if(i3.getC() < c) { if(i3.hasNextone() == 0) { i3.goNext(); i3.addHere(c, a, d, p1, p2, p3); } else i3.goNext(); } else list3.addToStart(c, a, d, p1, p2, p3); } } } else if (a<=15) { i4.restart(); if(i4.hasNext() == 0) { list4.addToStart(c, a, d, p1, p2, p3); } else { while(i4.hasNext() == 1) { if(i4.getC() < c) { if(i4.hasNextone() == 0) { i4.goNext(); i4.addHere(c, a, d, p1, p2, p3); } else i4.goNext(); } else list4.addToStart(c, a, d, p1, p2, p3); } } } return 1; } Αυτο που θα ηθελα ειναι αν μπορουσα να κανω τα ιδια πραγματα οχι χρησιμοποιωντας list1 list2 αλλα τον πινακα. Δεν ξερω αν γινομαι κατανοητος.
Aztec Δημοσ. 11 Νοεμβρίου 2015 Δημοσ. 11 Νοεμβρίου 2015 Εδώ σε εχω LinkedList<Integer> a =new LinkedList(); a.add(1); a.add(2); a.add(3); //References to lists LinkedList[] arr=new LinkedList[4]; arr[0]=a; ListIterator ltr = arr[0].listIterator(); while(ltr.hasNext()) { System.out.println(ltr.next()); } Αν θές να φτιάξεις την λογική απο Node θα καταλήξεις να υλοποιήσεις λειτουργικότητα της λίστας πάλι Δημιουργία Λίστας μόνο απο Nodes και εκτύπωση Node[] arr = new Node[10]; arr[0]=new Node(null,0,null); for (int i=1; i < 10; i++) { arr[i]=new Node(arr[i-1],i,null); arr[i-1].next=arr[i]; } Node prn = arr[0]; while (prn.next!=null) { System.out.println(prn.item); prn=prn.next; } 1
nplatis Δημοσ. 12 Νοεμβρίου 2015 Δημοσ. 12 Νοεμβρίου 2015 Μια παρατήρηση: αν δεν μας πεις ακριβώς τι πρόβλημα έχεις, δεν πρόκειται να λάβεις ικανοποιητική απάντηση, και στο τέλος θα εκνευρίσεις κόσμο που προσπαθεί να σε βοηθήσει σε λάθος ερωτήματα. Στο πρώτο μήνυμα δίνεις έναν κώδικα που, με μια πρώτη ματιά φαίνεται σωστός, αλλά γράφεις «δεν δουλεύει». Εγώ καταλαβαίνω (όπως και άλλοι) «δεν τρέχει καθόλου / δεν μεταγλωττίζεται». Μετά από μερικά μηνύματα γράφεις «δεν βγάζει σφάλματα, αλλά δεν δουλεύει όπως πρέπει». Πάλι δηλαδή δεν μας λες τι δεν σου δουλεύει σωστά! Στο τέλος μας δίνεις ολόκληρο έναν κώδικα που δεν χρησιμοποιεί αυτό που θέλεις να χρησιμοποιήσεις. Εμείς τι πρέπει να κάνουμε με αυτό; Στο ενδιάμεσο παρατηρείς ότι, καθώς τα ερωτήματά σου δεν ήταν ποτέ ξεκάθαρα, σου έχουν δοθεί άσχετες απαντήσεις, σε ό,τι νόμιζε και με όποιες υποθέσεις νόμιζε ο καθένας που διάβαζε το θέμα... Αυτά! ΥΓ. Γράφεις κάπου: Τονιζω το να δειχνει, οχι να ισουται, διοτι αυτο λεει η ασκηση και απο οτι καταλαβαινω εφοσον θελει να δειχνει, θα μπορουμε μεσω του πινακα να εχουμε προσβαση σε ολοκληρη την λιστα. Αυτό είναι το σημείο που, δυστυχώς , μαθαίνεις ότι στην Java τα πάντα (εκτός από τις μεταβλητές απλώς τύπων, π.χ. int, double κ.λπ.) είναι δείκτες -- αλλά δεν μας το λένε για να μην τρομάξουμε. Γι' αυτό και τις «μεταβλητές» αντικειμένων είναι καλύτερο να τις λέμε «αναφορές», για να το θυμόμαστε. Έτσι αν έχεις π.χ. class Node {...} Node a = new Node(); Node b = a; έχεις φτιάξει ένα αντικείμενο με τη new και έχεις δύο αναφορές σε αυτό, τις a και b. Μεταξύ αντικειμένων, το = σημαίνει πάντα «βάλε την αναφορά να δείχνει σε...» 2
pavlos1908 Δημοσ. 12 Νοεμβρίου 2015 Μέλος Δημοσ. 12 Νοεμβρίου 2015 Aztec σε ευχαριστω. nplatis εχεις δικιο απλως ειμαι και εγω μπερδεμενος με το ολο concept καπως. Θα δοκιμασω αυτο που εγραψε ο Aztec και αν δεν βγαλω ακρη θα επανελθω.
nplatis Δημοσ. 12 Νοεμβρίου 2015 Δημοσ. 12 Νοεμβρίου 2015 Όχι! Πρέπει να δοκιμάσεις τον κώδικά σου πιο προσεκτικά! Είσαι σίγουρος ότι η λίστα σου δουλεύει σωστά από μόνη της; Αν όχι, πρέπει να την δοκιμάσεις προσεκτικά, για να δεις τι δεν κάνει σωστά. Μόλις είσαι σίγουρος ότι δουλεύει σωστά, φτιάξε πίνακα και δοκίμασε τις πολλές λίστες που χρειάζεσαι. 1
pavlos1908 Δημοσ. 14 Νοεμβρίου 2015 Μέλος Δημοσ. 14 Νοεμβρίου 2015 Είμαι σίγουρος ναι γιατί έχω testfile που μπορώ να την ελεγξω. Οκ θα το δοκιμάσω ευχαριστώ πολύ για την βοήθεια.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα