class Grade Histogram public Grade Histogramint max Grade

  • Slides: 27
Download presentation

class Grade. Histogram { Σωστό ή λάθος? public Grade. Histogram(int max. Grade, int[] grades)

class Grade. Histogram { Σωστό ή λάθος? public Grade. Histogram(int max. Grade, int[] grades) { int[] histogram = new int[max. Grade]; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } public String to. String(){ { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } Οι μεταβλητές max. Grade και histogram δεν είναι ορισμένες. Για να μπορεί να τις βλέπει η μέθοδος print (ή οποιαδήποτε άλλη μέθοδος) θα πρέπει να είναι ορισμένες ως πεδία της κλάσης ! Σ Ο Θ } Α Λ

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade.

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade. Histogram(int max. Grade, int[] grades) { int[] histogram = new int[max. Grade]; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } public String to. String(){ { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } O constructor δεν αρχικοποιεί τα πεδία της κλάσης. Οι μεταβλητές max. Grade και histogram που ορίζονται μέσα στον constructor είναι τοπικές μεταβλητές και δεν αλλάζουν την τιμή των πεδίων. Α Λ Ο Θ ! Σ

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade.

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade. Histogram(int max. Grade, int[] grades) { this. max. Grade = max. Grade; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } public String to. String(){ { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } H μεταβλητή max. Grade αρχικοποιείται σωστά. Ο πίνακας histogram όμως όχι. Τον έχουμε ορίσει σωστά αλλά δεν τον έχουμε δημιουργήσει (δεν του έχουμε δώσει χώρο)! Δεν έχουμε προσδιορίσει το μέγεθος του Α Λ Ο Θ ! Σ

class Grade. Histogram { private int max. Grade; private int[] histogram = new int[max.

class Grade. Histogram { private int max. Grade; private int[] histogram = new int[max. Grade]; public Grade. Histogram(int max. Grade, int[] grades) { this. max. Grade = max. Grade; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } Σωστό? public String to. String(){ { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } Θυμηθείτε ότι οι εντολές αυτές θα εκτελεστούν πριν από τις εντολές του constructor. Εκείνη τη στιγμή δεν ξέρουμε το μέγιστο βαθμό και άρα δημιουργούμε ένα πίνακα μηδενικού μεγέθους! Α Λ Ο Θ ! Σ

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade.

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? public Grade. Histogram(int max. Grade, int[] grades) { histogram = new int[max. Grade]; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } public String to. String(){ { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } O Constructor θα αρχικοποιήσει σωστά τον πίνακα histogram, αλλά δεν θα αλλάξει το πεδίο max. Grade μιας και χρησιμοποιεί την τοπική μεταβλητή - παράμετρο To max. Grade εδώ αναφέρεται στο πεδίο και έχει τιμή μηδέν. Α Λ Ο Θ ! Σ

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? Πρώτα δηλώνουμε

class Grade. Histogram { private int max. Grade; private int[] histogram; Σωστό? Πρώτα δηλώνουμε τα πεδία μέσα στην κλάση public Grade. Histogram(int max. Grade, int[] grades) { this. max. Grade = max. Grade; histogram = new int[max. Grade]; for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } public String to. String() { String output = ""; for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } Στον Constructor δίνουμε τιμή στο max. Grade και αφού πλέον ξέρουμε το μήκος του πίνακα τον δημιουργούμε και του δίνουμε χώρο για να κρατάει τις τιμές. Τώρα μπορούμε και να κάνουμε και την αρχικοποίηση του πίνακα Ω Σ ! Ο Τ Σ

Παράδειγμα class Grade. Histogram { Ορισμός private int max. Grade; μεταβλητής private int[] histogram;

Παράδειγμα class Grade. Histogram { Ορισμός private int max. Grade; μεταβλητής private int[] histogram; πίνακα public Grade. Histogram(int max. Grade, int[] grades) { this. max. Grade = max. Grade; Δημιουργία histogram = new int[max. Grade]; πίνακα for (int i = 0; i < grades. length; i ++){ int x = grades[i]; histogram[x-1] ++; } } Οι κόκκινες μεταβλητές υπάρχουν } μόνο μέσα στο μπλοκ της μεθόδου Οι μπλε μεταβλητές είναι πεδία

Κλάσεις και αντικείμενα Grade. Histogram max. Grade histogram[] Ορισμός της κλάσης Grade. Histogram(int, int[])

Κλάσεις και αντικείμενα Grade. Histogram max. Grade histogram[] Ορισμός της κλάσης Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram) hist 2 = new Grade. Histogram(5, grades 2) Grade. Histogram max. Grade = 5 histogram = {1, 2, 1, 1, 1} Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram) hist 3 = new Grade. Histogram(5, grades 3) Grade. Histogram max. Grade = 5 histogram = {1, 1, 2, 1, 0} Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram)

Κλάσεις και αντικείμενα Grade. Histogram max. Grade histogram[] Ορισμός της κλάσης Grade. Histogram(int, int[])

Κλάσεις και αντικείμενα Grade. Histogram max. Grade histogram[] Ορισμός της κλάσης Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram) hist 2. add. Histogram(hist 3); hist 2 = new Grade. Histogram(5, grades 2) Grade. Histogram max. Grade = 5 histogram = {2, 3, 3, 2, 1} Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram) hist 3 = new Grade. Histogram(5, grades 3) Grade. Histogram max. Grade = 5 histogram = {1, 1, 2, 1, 0} Grade. Histogram(int, int[]) to. String() add. Histogram(Grade. Histogram) equals(Grade. Histogram)

class Grade. Histogram { private int max. Grade; private int[] histogram; private String output

class Grade. Histogram { private int max. Grade; private int[] histogram; private String output = “”; Σωστό? public Geometric(int max. Grade, int[] grades) { this. max. Grade = max. Grade; histogram = new int[max. Grade]; for (int i = 0; i < grades. length; i ++){ x = grades[i]; histogram[x-1] ++; } } H μεταβλητή output πλέον είναι πεδίο. Οι αλλαγές της τιμής της παραμένουν στο αντικείμενο public String to. String(){ { for (int i = 0; i < max. Grade; i ++){ output = output + (i+1) + ": " + histogram[i] + " "; } return output; } } Τι γίνεται αν κάνουμε πολλαπλές κλήσεις της μεθόδου to. String? Α Λ Ο Θ ! Σ

class Stack { private int capacity; private int size = 0; private int[] elements;

class Stack { private int capacity; private int size = 0; private int[] elements; public Stack(int capacity){ this. capacity = capacity; elements = new int[capacity]; } public void push(int element){ if (size == capacity){ System. out. println("Cannot enter any more elements"); return; } elements[size] = element; size ++; } public int pop(){ if (size == 0){ System. out. println("No elements to pop"); return -1; } size -- ; return elements[size]; } public boolean is. Empty(){ return (size == 0); } }

class Binary { public static void main(String[] args) { Stack my. Stack = new

class Binary { public static void main(String[] args) { Stack my. Stack = new Stack(100); int number = 1973; while (number > 0){ my. Stack. push(number%2); number = number/2; } while (!my. Stack. is. Empty()){ System. out. print(my. Stack. pop()); } } }

public String to. String(){ String return. String = "": for (int i = 0;

public String to. String(){ String return. String = "": for (int i = 0; i < size; i ++){ return. String = return. String + elements[i] + " "; } return. String; } public boolean equals(Stack other){ if (this. size != other. size){ return false; } for (int i = 0; i < size; i ++){ if (this. elements[i] != other. elements[i]){ return false; } } return true; }