Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
Πίνακες (Arrays) στη 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 στοιχεία ακεραίου τύπου & δεσμεύεται αντίστοιχος χώρος στη μνήμη
Αρχικοποίηση πινάκων: ArrayName=new type[limit] MyArray= new int[10] Δήλωση πινάκων: 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] 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] = …;
Αλφαριθμητικά στη Java (String)
Ορισμός 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 π.χ.: 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.replace(char αρχικά, char τελικά) π.χ. String s1, s2; s1 = “test”; s2 = s1.replace(‘t’, ‘a’); Αποτέλεσμα: s2 <- “aesa”
Προσπέλαση μεμονωμένων χαρακτήρων σε 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 θα βρει, ξεκινώντας από την αρχή του 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 contain TTG”) Γενικά: Όνομα_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(αλφαριθμητικό)
Type Casting… Έστω: Γίνεται: 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. 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.συνάρτηση(ορίσματα)