class Person private String name public PersonString name
class Person { private String name; public Person(String name){ this. name = name; } class Car { private int position = 0; private Person driver; public Car(int position, Person driver){ this. position = position; this. driver = driver; } public String get. Name(){ return name; } public void set. Name(String name) { this. name = name; } public Person get. Driver(){ return driver; } } } class Moving. Car. Driver 3 { public static void main(String args[]){ Person alice = new Person("Alice 1"); Car my. Car = new Car(1, alice); alice. set. Name(“Alice 2”); System. out. println(my. Car. get. Driver(). get. Name()); alice = new Person(“Alice 3”); System. out. println(my. Car. get. Driver(). get. Name()); } } Τι θα τυπώσει?
Εκτέλεση Person alice = new Person("Alice 1"); Car my. Car = new Car(1, alice); name alice 0 x 0010 my. Car 0 x 0020 driver 0 x 0010 position 1 “Alice 1”
Εκτέλεση alice. set. Name("Alice 2"); System. out. println(my. Car. get. Driver(). get. Name()); Τυπώνει “Alice 2” name alice 0 x 0010 my. Car 0 x 0020 driver 0 x 0010 position 1 “Alice 2”
Εκτέλεση alice = new Person("Alice 3"); System. out. println(my. Car. get. Driver(). get. Name()); Τυπώνει “Alice 2” alice 0 x 0030 my. Car 0 x 0020 driver 0 x 0010 position 1 name “Alice 3” name “Alice 2”
class Stack. Element { private int value; private Stack. Element next = null; Το επόμενο στοιχείο public Stack. Element(int value){ this. value = value; } public int get. Value(){ return value; } Επιστρέφει αντικείμενο public Stack. Element get. Next(){ return next; } public void set. Next(Stack. Element element){ next = element; } }
class Stack { private Stack. Element head; private int size = 0; Το πρώτο στοιχείο της στοίβας μας φτάνει για τα βρούμε όλα public int pop(){ if (size == 0){ // head == null System. out. println("Pop from empty stack"); System. exit(-1); } int value = head. get. Value(); Σταματάει την εκτέλεση του head = head. get. Next(); προγράμματος size --; return value; } public void push(int value){ Stack. Element element = new Stack. Element(value); element. set. Next(head); head = element; Τα αντικείμενα τύπου size ++; Stack. Element δημιουργούνται } μέσα στην Stack. }
Μέθοδος to. String() Χρειαζόμαστε μία Stack. Element μεταβλητή για να διατρέξει τα στοιχεία της στοίβας public String to. String(){ String return. String = ""; Int. Stack. Element e = head; for (int i = 0; i < size; i ++){ return. String = return. String + e. get. Value() + " "; e = e. get. Next(); } return. String; } public String to. String(){ Εναλλακτική υλοποίηση String return. String = ""; Int. Stack. Element e = head; while(e != null){ return. String = return. String + e. get. Value() + " "; e = e. get. Next(); } return. String; }
class Stack. Example { public static void main(String[] args){ Stack s = new Stack(); s. push(3); s. push(2); s. push(1); System. out. println(s. pop()); } }
class Person { private String name; private int number; public Person(String name, int num){ this. name = name; this. number = num; } public String to. String(){ return name+": "+number; } }
class Person. Stack. Element { private Person value; private Person. Stack. Element next; public Person. Stack. Element(Person val){ value = val; O constructor παίρνει σαν όρισμα το } αντικείμενο που έχει ήδη δημιουργηθεί public void set. Next(Person. Stack. Element element){ next = element; } public Person. Stack. Element get. Next(){ return next; } public Person get. Value(){ return value; } } Το αντικείμενο το χειριζόμαστε σαν μια οποιαδήποτε μεταβλητή
class Stack { private Person. Stack. Element head; H pop πλέον επιστρέφει μεταβλητή private int size = 0; τύπου Person public Person pop(){ if (size == 0){ // head == null System. out. println("Pop from empty stack"); return null; } int value = head. get. Value(); Επιστρέφουμε null για να head = head. get. Next(); σηματοδοτήσουμε ότι έγινε λάθος size --; (όχι απαραίτητα ο καλύτερος return value; τρόπος να το κάνουμε αυτό) } public void push(Person value){ Stack. Element element = new Stack. Element(value); element. set. Next(head); head = element; size ++; } }
class Stack. Example { public static void main(String[] args){ Person. Stack stack = new Person. Stack(); Person alice = new Person("Alice", 1); stack. push(alice); Person bob = new Person("Bob", 2); stack. push(bob); Person charlie = new Person("Charlie", 3); stack. push(charlie); System. out. println(stack. pop()); } } Προσοχή! Αν καλέσουμε άλλη μια φορά την pop θα πάρουμε runtime error γιατί προσπαθούμε να προσπελάσουμε null αναφορά
- Slides: 33