You are on page 1of 3

ΘΕΜΑ 1ο

Ποιοι από τους παρακάτω ισχυρισμούς είναι σωστοί και ποιοι λάθος (χωρίς εξήγηση).
(1) Η προσπέλαση μιας μεθόδου γίνεται μόνο με την αποστολή μηνύματος.
(2) Ένα catch μπλοκ δεν ενεργοποιείται αν δεν εγερθεί εξαίρεση.
(3) Ο δημιουργός καλείται πάντοτε άμεσα (όχι έμμεσα) στη δημιουργία στιγμιοτύπου.
(4) Μια μέθοδος είναι υποχρεωτικό να έχει παραμέτρους (ορίσματα).
(5) Ένα buffered stream είναι ένα είδος φίλτρου.
(6) Κάθε πρόγραμμα Java πρέπει να διαθέτει τουλάχιστον μια κλάση με το όνομα του
αρχείου που το περιέχει.
(7) Ένας δημιουργός μιας κλάσης συμπεριφέρεται όπως μια μέθοδος της κλάσης.
(8) Όλοι οι μέθοδοι μιας κλάσης πρέπει να δηλώνονται ως private.
(9) Η αντιγραφή των δεδομένων ενός αντικειμένου σ’ ένα άλλο δεν μπορεί να γίνει με
τον τελεστή ανάθεσης/καταχώρησης.
(10) Ένα φίλτρο δεν μπορεί να χρησιμοποιηθεί αυτόνομα, αλλά πάντα σε αναφορά με
κάποιο stream αρχείου.
(11) Ο προσδιοριστής final μιας κλάσης δηλώνει ότι αυτή δεν έχει στιγμιότυπα.
(12) Ένα try μπλοκ μπορεί να έχει περισσότερα του ενός catch μπλοκς.
(13) Οι διεπαφές δεν σχηματίζουν ξεχωριστή ιεραρχία από αυτή των κλάσεων.
(14) Ένα byte stream δεδομένων εξόδου έχει μεγαλύτερη μονάδα αποθήκευσης από ένα
byte stream αρχείου εξόδου.
(15) Η άμεση πρόκληση εξαίρεσης δημιουργείται όταν χρησιμοποιείται η εντολή throw
στην επικεφαλίδα μιας μεθόδου.

ΘΕΜΑ 2ο
Δίνεται η εξής περιγραφή: «Υπάρχο υν διάφορα είδη συσκευών, ό πως οι ηλεκτρικές, οι
μηχανικές και οι ηλεκτρονικές συσκευές. Ηλεκτρικές συσκευές είναι τα είναι τα οι ηλεκ.
σκούπες και τα ηλεκ. σίδερα. Μηχανικές συσκευές είναι τα ποδήλατα και οι κλειδαριές, ενώ
ηλεκτρονικές οι υπολογιστές. Υπάρχουν δύο ηλεκ. σκούπες, η ΧΟΥΒΕΡ1 και ΖΙΜΕΝΣ2, ένα
ποδήλατο, το ΙΝΤΕΑΛ3, ένας υπολογιστής, ο ΠΛΑΙΣΙΟ4, και δύο ηλεκ. Σίδερα, το
ΦΙΛΙΠΣ5 και το ΧΟΥΒΕΡ6».
α) Συμπληρώστε ένα πίνακα, ό πως ο πίνακας Α παρακάτω, ό που στην πρώτη στήλη να
καταγράψετε όλες τις κλάσεις που αναφέρονται στην παραπάνω περιγραφή και στη
δεύτερη στήλη τα στιγμιότυπά τους, σύμφωνα με το παράδειγμα. Αν κάποια κλάση δεν
έχει στιγμιότυπα, η θέση στη διπλανή στήλη θα παραμείνει κενή.
β) Συμπληρώστε ένα πίνακα, όπως ο πίνακας Β παρακάτω, όπου στην πρώτη στήλη να
καταγράψετε όλες τις κλάσεις που καταγράψατε στον πίνακα Α και στη δεύτερη στήλη
τις άμεσες υπερκλάσεις τους, σύμφωνα με το παράδειγμα. [4]

ΚΛΑΣΗ ΣΤΙΓΜΙΟΤΥΠΑ ΚΛΑΣΗ ΥΠΕΡΚΛΑΣΗ


Φοιτητής Γιώργος, Πέτρος Φοιτητής Άνθρωπος

(Α) (Β)

γ) Σχεδιάστε μια ιεραρχία που να περιλαμβάνει όλες τις κλάσεις και τα στιγμιότυπα.
δ) Αν η ιεραρχία αυτή είναι η τελική, δηλ. δεν υπάρχουν άλλες κλάσεις ή στιγμιότυπα,
γράψτε γενικό κώδικα Java που να υλοποιεί την ιεραρχία που σχεδιάσατε. Γενικός
κώδικας σημαίνει: (1) μόνο τις (επι)κεφαλίδες με κενό σώμα, για τον ορισμό των κλάσεων,
και (2) κλήση των αυτόματων δημιουργών (δηλ. αυτών χωρίς ορίσματα) για τη
δημιουργία στιγμιοτύπων, όπου απαιτείται.
ΘΕΜΑ 3ο
α) Γράψτε μια μέθοδο Java (changeString), που παίρνει σαν όρισμα ένα αλφαριθμητικό s και
επιστρέφει το αλφαριθμητικό με τις εξής αλλαγές: κάθε ‘k’ έχει αντικατασταθεί με ‘x’, αν τα
‘k’ είναι περισσότερα από τα ‘x’, και κάθε ‘x’ έχει αντικατασταθεί με ‘k’, αν τα ‘x’ είναι
περισσότερα από τα ‘k’. Αν δεν υπάρχουν ούτε ‘k’ ούτε ‘x’, τότε επιστρέφει το μήνυμα true.
β) Γράψτε ένα πρόγραμμα Java που να διαβάζει 50 λέξεις από ένα αρχείο (words.dat), να
αλλάζει τα ‘k’ των λέξεων σε ‘x’, αν τα ‘k’ είναι περισσότερα από τα ‘x’, και αντίστροφα, και
να τις τυπώνει στην οθόνη, εκτός από αυτές που δεν έχουν ούτε ‘k’ ούτε ‘x’. Κάθε λέξη είναι
σε διαφορετική γραμμή στο αρχείο. Να χρησιμοποιηθεί η μέθοδος στο (α).
[Στο (α) για τη διαχείριση του αλφαριθμητικού να χρησιμοποιηθούν μόνο από τις εξής
μεθόδους: charAt (int index), equals (String s), indexOf (char ch), length(), replace (char
oldChar, char newChar), substring (int beginIndex)]

ΘΕΜΑ 4ο
Δίνεται το παρακάτω πρόγραμμα Java.
(α) Εξηγείστε συνοπτικά ποιό είναι το αποτέλεσμα (εσωτερικό και εξωτερικό) της κάθε
γραμμής κώδικα 1-17 της μεθόδου main της κλάσης ‘RunParent’.
(β) Αν στην κλάση Child υπήρχε η δήλωση «double value = 3.0;», τι θα άλλαζε στα
αποτελέσματα; Εξηγείστε.
(γ) Αν η «String message;» γίνει «private String message;», θα υπάρξει κάποιο πρόβλημα
κατά την εκτέλεση της main; Αν ναι, πού και γιατί;
(δ) Αν η έκφραση «super(value)» στην Child έλειπε, θα άλλαζε κάποιο αποτέλεσμα
(εσωτερικό ή εξωτερικό); Ποιο και γιατί;
(ε) Σχεδιάστε την ιεραρχία (κλάσεων και στιγμιοτύπων) που θα δημιουργήσει η Java με την
εκτέλεση της main.

class Parent{ public void setValue1 (double value)


double value = 0; {this.value += value;}
public Parent(){ public void setValue2 (double value)
value = 1.0; {super.setValue (--value);}}
System.out.println("Parent value "
+value);} public class RunParent{
public Parent(double value){ public static void main(String args []){
System.out.println("Parent value " + (1) Parent P = new Parent();
value);} (2) Child C1 = new Child(5.5);
public void setValue (double value){ (3) Child C2 = new Child("Second
this.value -= value;}} Child");
(4) System.out.println (C1.value);
class Child extends Parent{ (5) System.out.println (C2.value);
String message; (6) System.out.println (C1.message);
public Child (String message){ (7) System.out.println (C2.message);
this.message = message; (8) System.out.println (P.value);
System.out.println("Child "+message);} (9) C1.setMessage ("First Child");
public Child (double value){ (10) System.out.println (C1.message);
super(value); (11) C2.setValue (7.5);
this.value = value++; (12) System.out.println (C2.value);
System.out.println("Child value " (13) System.out.println (P.value);
+value);} (14) C1.setValue1 (3);
public void setMessage (String message){ (15) System.out.println (C1.value);
this.message = message;} (16) C1.setValue2 (8.5);
(17) System.out.println (C1.value);}}
ΘΕΜΑ 5ο
Γράψτε πρόγραμμα Java που όταν τρέχει να εμφανίζει το συγκεκριμένο πλαίσιο (υποκλάση
της JFrame) το οποίο περιέχει 4 αντικείμενα
τύπου JTextField μεγέθους 8 χαρακτήρων το
καθένα, 4 JLabel και δύο κουμπιά JButton. O
διαχειριστής διάταξης όλου του πλαισίου να
είναι ο BorderLayout.
Λειτουργίες:
1. Ο χρήστης συμπληρώνει 3 ακεραίους στα
τρία πρώτα JTextField.
2. Όταν στη συνέχεια πατήσει το κουμπί
“Generate Randoms - Max”, το πρόγραμμα υπολογίζει ένα πλήθος τυχαίων αριθμών Δ
ανάμεσα στο κάτω και το άνω όριο, και υπολογίζει τη μέγιστη τιμή ανάμεσα σε αυτούς
τους τυχαίους αριθμούς. Αυτή την τιμή την εμφανίζει στο τελευταίο πεδίο κειμένου.
3. Πατώντας το κουμπί “Clear” να καθαρίζονται όλες οι περιοχές κειμένου.

Κλάσεις και μέθοδοι που πιθανόν να χρειάζονται για το θέμα


• Για τυχαίους αριθμούς θα πρέπει να δημιουργήσετε ένα στιγμιότυπο της κλάσης Random του
πακέτου java.util.Random και στη συνέχεια η μέθοδος nextDouble() αυτής της κλάσης
επιστρέφει ένα τυχαίο double αριθμό μεταξύ 0 και 1.
• Σας δίνονται οι μέθοδοι String getText() και setText(String t) της κλάσης JTextField.
• Σας δίδεται η μέθοδος getSelectedIndex() της κλάσης JComboBox.
• Η μέθοδος parseDouble(String t) της κλάσης Double, μετατρέπει ένα String σε double και τον
επιστρέφει.
• Η μέθοδος parseInt(String t) της κλάσης Integer, μετατρέπει ένα String σε int και τον
επιστρέφει.
• Η μέθοδος intValue() της κλάσης Double, μετατρέπει ένα Double σε ακέραιο και τον
επιστρέφει.
• Για τα events που απαιτούνται σας δίνεται ως βοήθεια το παρακάτω απόσπασμα κώδικα.
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();

ΘΕΜΑ 6ο

Να αναπτύξετε ένα Applet μεγέθους 500x500, που:


(α) Να εμφανίζει 10 τετράγωνα διαστάσεων 50x50 το
ένα εφαπτόμενο με το άλλο στο πάνω μέρος του
Applet.
(β) Όταν ο χρήστης κινεί το ποντίκι μέσα στα
πλαίσια του πρώτου τετραγώνου πάνω αριστερά τότε
να εμφανίζονται δίπλα στον mouse pointer οι
συντεταγμένες του σημείου που βρίσκεται εκείνη τη
στιγμή το ποντίκι, με τη μορφή π.χ. (15,25).
(γ) Να δώσετε τον κατάλληλο κώδικα HTML που να
ενσωματώνει το συγκεκριμένο Applet σε κάποια
ιστοσελίδα.

class java.awt.Graphics: Τα συμβάντα ποντικιού υλοποιούνται από το interface


drawLine(int x1, int y1, int x2, int y2) MouseListener, το οποίο έχει 2 μεθόδους:
drawRect(int x, int y, int width, int height) void mouseMoved(java.awt.event.MouseEvent evt)
drawString(String str, int x, int y) void mouseDragged(java.awt.event.MouseEvent evt)

Χρήσιμες μέθοδοι των αντικειμένων MouseEvent:


getX() και getY().