280 likes | 458 Views
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java. Πίνακες (Arrays) στη Java. Χρησιμότητα Πινάκων. Για τον ορισμό ομάδων τιμών του ίδιου τύπου, αντί να ορίζουμε ξεχωριστή μεταβλητή για να αποθηκεύουμε κάθε τιμή, χρησιμοποιούμε πίνακες ( arrays)
E N D
Μάθημα :Βασικά Στοιχεία της Γλώσσας Java
Χρησιμότητα Πινάκων • Για τον ορισμό ομάδων τιμών του ίδιου τύπου, αντί να ορίζουμε ξεχωριστή μεταβλητή για να αποθηκεύουμε κάθε τιμή, χρησιμοποιούμε πίνακες (arrays) • Τα στοιχεία του πίνακα σημειώνονται με κοινό όνομα που συνοδεύεται από ένα δείκτη (index) • Ο δείκτης είναι ένας ακέραιος αριθμός τοποθετημένος μέσα σε αγκύλες []
Δηλώσεις Πινάκων (Μίας Διάστασης) • float []number; ήfloat number[]; • int []C;ήint C[]; • String []names; ή String names[]; Γενικός Ορισμός Πίνακα Τύπος_δεδομένων []Όνομα_Πίνακα; ή Τύπος_δεδομένωνΌνομα_Πίνακα[]; ΠΡΟΣΟΧΗ: Με τη δήλωση ενός πίνακα απλώς δημιουργείται ένας pointer. Δε γίνεται ούτε κατανομή μνήμης για τον πίνακα, ούτε αρχικοποίησή του.
Ορισμός & Δημιουργία Πίνακα • C = new int[5]; -> Δημιουργία πίνακα C πέντε ακεραίων • Ισοδύναμα: int C[] = new int[5]; ήint []C = new int[5]; Οι παραπάνω εντολές δηλώνουν στο μεταγλωττιστή της Java ότι ο πίνακας C έχει 5 στοιχεία ακεραίου τύπου & δεσμεύεται αντίστοιχος χώρος στη μνήμη
Δήλωση πινάκων: type [] arrayName; int [] MyArray; Αρχικοποίηση πινάκων: ArrayName=new type[limit] MyArray= new int[10] b[0]=10 c[1]=20;
Αρχικοποίηση και Πρόσβαση στα Στοιχεία Πίνακα (1/2) • int C[] = new int[5]; • Πρόσβαση από: C[0] έως C[4] 0 1 2 3 4 ΠΡΟΣΟΧΗ!!! Length=5 Αρχικοποίηση με loop: for (int i=0; i<5; i++) C[i] = i; i: ΔΕΙΚΤΗΣ (index)
Αρχικοποίηση και Πρόσβαση στα Στοιχεία Πίνακα (2/2) • Αρχικοποίηση κατά τη δήλωση: int []C = {5, 6, 34, 7}; Αρχικοποίηση βάσει άλλου πίνακα: int []C = {5, 6, 34, 7}; int []D = C;
Αναφορά στο πλήθος των στοιχείων ενός Πίνακα int []a = new int[100]; System.out.println(“Dimension of a: “+a.length); Επιστρέφει το πλήθος των στοιχείων του πίνακα (εδώ το 100) Γενικά: Όνομα_Πίνακα.length
Προσοχή στα όρια των Πινάκων… • Έστω: int []my_array = new int[20]; • Κάνοντας αναφορά σε στοιχείο εκτός ορίων του πίνακα, π.χ. στο my_array[21], παίρνω μήνυμα λάθους: Exception in thread “…” java.lang.ArrayIndexOutOfBoundsException: … Γι’ αυτό: for (int i=0; i<my_array.length; i++) Χρήση του my_array[i]
Πίνακες Δύο Διαστάσεων • Δήλωση: float [][]AA; • Ορισμός: ΑΑ = new float[4][8]; Ορισμός πίνακα 4 γραμμών και 8 στηλών (4x8) Επεξεργασία: for(int row=0; row<4; row++) for(int col=0; col<8; col++) AA[row][col] = …;
Ορισμός string… Μία συμβολοσειρά είναι μία σειρά από χαρακτήρες. Στη Java μία συμβολοσειρά υλοποιείται με τη κλάση String του πακέτου java.lang. Συνδυασμός χαρακτήρων μεταξύ: [a…z], [A…Z], [0…9], [!@#$…]
Δημιουργία string στη Java Δήλωση μεταβλητής με όνομα name τύπου String Δηλώσεις: • String name; • String name = “John”; • String name = new String(5); Δήλωση μεταβλητής με όνομα name τύπου String και αρχική τιμή το “John” Δήλωση μεταβλητής με όνομα name, η οποία είναι ένα αντικείμενο τύπου String 5 χαρακτήρων Ένα String είναι ένα αντικείμενο και όπως όλα τα αντικείμενα πρέπει να δηλωθεί και να δημιουργηθεί με την εντολή new
Αναφορά στο πλήθος χαρακτήρων ενός string Δήλωση:String name = “George Bush”; Αναφορά: System.out.println(“Number of characters in name:” +name.length()); Γενικά:όνομα_string.length()
Συνένωση string • Με χρήση του τελεστή + • π.χ.: • String s1 = “hello”; String s2 = “world”; String s_all = s1 + s2; //s_all <- “helloworld” • int result = 1000; System.out.println(“Result= ” + result); ΠΡΟΣΟΧΗ!!!
Έλεγχος Ισότητας string • Έλεγχος Ισότητας 2 string: π.χ.: String s1, s2; s1 = …; s2 = …; if(s1.equals(s2)) System.out.println(“Strings are identical”); else System.out.println(“Strings are different”); Γενικά: Όνομα_string1.equals(Όνομα_string2) ΠΡΟΣΟΧΗ: Μια συνήθης πηγή λαθών για τους νέους στη Java είναι η σύγκριση για ισότητα των String με τον τελεστή ==. Επειδή τα String είναι αντικείμενα ο τελεστής == δεν συγκρίνει τη τιμή τους, αλλά τη διεύθυνσή τους στη μνήμη.Αν θέλουμε να δούμε αν δύο String έχουν την ίδια τιμή θα πρέπει να χρησιμοποιήσουμε τη συνάρτηση equals
Μετατροπή κεφαλαίων χαρακτήρων σε πεζούς και αντίστροφα… • π.χ.: String s1, s2, s3; s1 = “heLLo”; s2 = s1.toUpperCase(); s3 = s1.toLowerCase(); Σε κεφαλαία: s2 <- “HELLO” Σε πεζά: s3 <- “hello”
Υπο-αλφαριθμητικά (substring) Γενικά: αρχικό_string.substring(int αρχή, int τέλος) • Υπο-αλφαριθμητικά: String s1, s2; s1 = “hello there”; s2 = s1.substring(0, 4); • Αποτέλεσμα: s2 <- “hell” Επιστρέφει ένα νέο string το οποίο αποτελεί substring αυτού.Το 1o ακέραιο όρισμα καθορίζει τη θέση του πρώτου χαρακτήρα Το 2o ακέραιο όρισμα είναι η θέση του τελευταίου χαρακτήρα -1. Το μέγεθος του substring θα είναι το 2o int μείον το 1o int. Αν ο δεύτερος ακέραιος απουσιάζει τότε το substring εκτείνεται ωςτο τέλος του αρχικού string
Αντικατάσταση χαρακτήρων σε αλφαριθμητικό Αντικαθιστά όλες τις εμφανίσεις του χαρακτήρα που ορίζεται ως 1ο όρισμα μετο χαρακτήρα που ορίζεται ως 2ο όρισμα.Αν δε γίνουν αντικαταστάσεις επιστρέφεται το αρχικό string • π.χ. String s1, s2; s1 = “test”; s2 = s1.replace(‘t’, ‘a’); • Αποτέλεσμα: s2 <- “aesa” Γενικά: όνομα_string.replace(char αρχικά, char τελικά)
Προσπέλαση μεμονωμένων χαρακτήρων σε string Επιστρέφει την τιμή του χαρακτήρα στη συγκεκριμένη θέση. Η θέση παίρνει τιμές από 0 έως length()-1. Η θέση του 1ου χαρ/ηρα είναι 0, η επόμενη 1 κοκ. • π.χ.: String s1 = “testing”; System.out.println(“Character at index 4 is:” + s1.charAt(4)); Γενικά: όνομα_string.charAt(int index) Αποτέλεσμα: Character at index 4 is:i
Έλεγχος ύπαρξης χαρακτήρων σε string Επιστρέφει τη θέσητου 1ου ‘G’ που θα βρει,ξεκινώντας από την αρχή του string, διαφορετικά επιστρέφει -1 • π.χ.: String temp = “ACGTGCGC”; int location = temp.indexOf(‘G’); (Αποτέλεσμα: 2) Επιστρέφει τη θέσητου 1ου ‘G’ που θα βρει,ξεκινώντας από το τέλος του string, διαφορετικά επιστρέφει -1 π.χ.: String temp = “ACGTGCGC”; int location = temp.lastIndexOf(‘G’); (Αποτέλεσμα: 6)
Έλεγχος ύπαρξης substring σε string Επιστρέφει τη θέσητου 1ου “TTG” που θα βρει,ξεκινώντας από την αρχή του string, διαφορετικά επιστρέφει -1 • π.χ.: String temp = “ACGTTTGC”; if(temp.indexOf(“TTG”)!=-1) System.out.println(“temp contains TTG”); else System.out.println(“temp doesn’t containTTG”) Γενικά: Όνομα_string.indexOf(Όνομα_substring)
Από αριθμητικούς τύπους σε string • Μέθοδος valueOf • π.χ.: int n = 49; String n_to_string = String.valueOf(n); • Αποτέλεσμα: n_to_string <- “49” Γενικά, κλήση ως: String.valueOf(αριθμητική έκφραση)
Από string σε τύπο ακεραίου • π.χ.: String temp = “34567”; int temp_to_int = Integer.parseInt(temp); Αποτέλεσμα: temp_to_int <- 34567 Γενικά, κλήση ως: Integer.parseInt(αλφαριθμητικό)
Έστω: int i = 8; int j = 7; float division = i/j; // division <- 1.0 (ακέραια διαίρεση) Για να διατηρηθεί η ακρίβεια της διαίρεσης κάνουμε type casting: float division = ((float)i)/j;// division <- 1.142857… Γίνεται: Αυτόματα Μη αυτόματα (T) N Όπου: T είναι το όνομα ενός αριθμητικού τύπου N το όνομα της μεταβλητής άλλου τύπου Το αποτέλεσμα είναι του τύπου T. Type Casting… byte -> short -> int -> long -> float -> double
Οι κυριότερες Μαθηματικές Συναρτήσεις της Java • abs(όρισμα) -> απόλυτη τιμή ορίσματος, π.χ. abs(-5.78) = 5.78 • pow(num,N) -> numN -> Ύψωση αριθμού σε δύναμηπ.χ. pow(3,5)-> 35 • sqrt(όρισμα) -> τετραγωνική ρίζα αριθμού, π.χ. sqrt(4) -> 2 • random() -> επιστρέφει ένα τυχαίο αριθμό μεταξύ 0 και 1, π.χ. random() -> 0.67 Κλήση μαθηματικών συναρτήσεων Math.συνάρτηση(ορίσματα)