מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות
תוכן עניינים טיפוסים מורכבים
טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד מערכים מחרוזות (String) ועוד לא נשמרים במחסנית זמן ריצה נשמרים במקום אחר בתוכנית שנקרא ערימה 0 1 2 במשתנה נשמרת הפניה (כתובת) 0 0 0
תוכן עניינים טיפוסים מורכבים מחרוזת
מחרוזות בקיצור רצף של תווים Good morning sunshine למשל הגדרה ויצירת מחרוזות String str1; String str2 = Good morning sunshine ; String str3 = Good morning sunshine String str4 = new String(str3); String str5 = new String(); char[] arr = {'H', 'e', 'l', 'l', 'o'}; String str6 = new String (arr);
מחרוזות בקיצור רצף של תווים Good morning sunshine למשל הגדרה ויצירת מחרוזות String str1; String str2 = Good morning sunshine ; String str3 = Good morning sunshine String str4 = new String(str3); String str5 = new String(); char[] arr = {'H', 'e', 'l', 'l', 'o'}; String str6 = new String (arr); טיפוס שם ערך String str1 undef String str2 String str3 String str4 String str5 Good morning sunshine Good morning sunshine String str6 Hello
מחרוזות השוואת מחרוזות == באמצעות s.o.p(str2 == str3); // true s.o.p(str2 == str4); // false s.o.p(str2 == str5); // false s.o.p(str2 == str6); // false s.o.p(str3 == str4); // false טיפוס שם ערך String str1 undef String str2 Good morning sunshine s.o.p(str1 == str4); // compilation error String str3 String str4 Good morning sunshine String str5 String str6 Hello
שיטות של המחלקה String equals השוואת מחרוזות באמצעות s.o.p(str2.equals(str2)); // true s.o.p(str2.equals(str3)); // true s.o.p(str2.equals(str4)); // true s.o.p(str2.equals(str5)); // false s.o.p(str2.equals(str6)); // false טיפוס שם ערך String str1 undef String str2 Good morning sunshine s.o.p(str3.equals(str4)); // true String str3 String str4 Good morning sunshine String str5 String str6 Hello
שיטות של המחלקה String s.o.p(str5.length()); // 0 s.o.p(str6.length()); // 5 אורך של מחרוזת טיפוס שם ערך String str1 undef String str2 String str3 String str4 String str5 String str6 Good morning sunshine Good morning sunshine Hello
שיטות של המחלקה String s.o.p(str6.charat(0)); // H s.o.p(str6.charat(4)); // o s.o.p(str6.charat(str6.length())); // Run time error שליפת תו מהמחרוזת טיפוס שם ערך String str1 undef String str2 String str3 String str4 String str5 String str6 Good morning sunshine Good morning sunshine Hello
שיטות של המחלקה String s.o.p(str6.indexof( H )); // 0 s.o.p(str6.indexof( l )); // 2 s.o.p(str6.indexof( o )); // 4 s.o.p(str6.indexof( s )); // -1 מיקום של תו טיפוס שם ערך String str1 undef String str2 String str3 String str4 String str5 String str6 Good morning sunshine Good morning sunshine Hello
שיטות של המחלקה String תת-מחרוזת s.o.p(str2.substring(0, 4)); // Good s.o.p(str6. substring(1, 4)); // ell s.o.p(str6. substring(0, str6.length())); // Hello s.o.p(str6. substring(0)); // Hello s.o.p(str6. substring(1)); // ello טיפוס שם ערך String str1 undef String str2 Good morning sunshine String str3 String str4 Good morning sunshine String str5 String str6 Hello
שרשור עם מחרוזות String str7 = Hello + + World ; str7 = str6 + + World ; s.o.p( The number is: +6+3); s.o.p( The number is: +(6+3)); טיפוס שם ערך String str1 undef String str2 String str3 String str4 String str5 String str6 String str7 Good morning sunshine Good morning sunshine Hello Hello World
שיטות נוספות ניתן למצוא שיטות רבות ונוספות ב- Interface) Java API (Application Program מתועדות ומוסברות היטב מומלץ לבדוק
תוכן עניינים טיפוסים מורכבים מחרוזת מספר מופעים של תו במחרוזת
מספר מופעים של תו במחרוזת public static void main(string[] args) { String str = "Hello, World!"; int count = countcharinstring(str, 'o'); System.out.println("'o' appears " + count + " times"); } public static int countcharinstring(string str, char c) { int count = 0; for (int i = 0; i < str.length(); i = i + 1) if (str.charat(i) == c) count = count + 1; return count; }
תוכן עניינים טיפוסים מורכבים מחרוזת מספר מופעים של תו במחרוזת חתימה של פונקציה
חתימה של פונקציה כיצד Java מזהה קריאות לפונקציות? דוגמה: לכל פונקציה מוצמדת חתימה החתימה מורכבת משם הפונקציה ומהפרמטרים שלה (טיפוסם, מספרם, והסדר בו הם מופיעים) לכל פונקציה חייבת להיות חתימה ייחודית משלה בקריאה לפונקציה Java מחפש חתימה התואמת את השם והערכים של הקריאה תתכן המרת טיפוסים במידת הצורך החתימה של הפונקציה public static int countcharinstring(string str, char c) { } היא שימו לב: טיפוס הערך המוחזר אינו חלק מהחתימה countcharinstring(string, char)
העמסה (overloading) של פונקציות מותר לתת לפונקציות שונות את אותו שם בתנאי שיש להן חתימות שונות דוגמה: public static int div2(int n) { return n/2 ; } public static double div2(double d) { return d/2 ; } div2(int) div2(double) החתימות:
העמסה (overloading) של פונקציות מותר לתת לפונקציות שונות את אותו שם בתנאי שיש להן חתימות שונות דוגמה: public static int div2(int n) { return n/2 ; } // (I) public static double div2(double d) { return d/2 ; } // (II) public static void main(string[] args) { int x = 5 ; double y = 5.0 ; } System.out.println(div2(x)); // (I) System.out.println(div2(y)); // (II) int z = (int) div2(y) ; // (II) System.out.println(z); שימוש:
העמסה (overloading) של פונקציות מותר לתת לפונקציות שונות את אותו שם בתנאי שיש להן חתימות שונות דוגמה: public static int div2(int n) { return n/2 ; } // (I) public static double div2(double d) { return d/2 ; } // (II) public static void main(string[] args) { int x = 5 ; double y = 5.0 ; } System.out.println(div2(x)); // (II) automatic casting System.out.println(div2(y)); // (II) int z = (int) div2(y) ; // (II) System.out.println(z); שימוש:
העמסה (overloading) של פונקציות מותר לתת לפונקציות שונות את אותו שם בתנאי שיש להן חתימות שונות דוגמה: public static int plus(int n, double d) { return n + (int) d; } public static double plus(double d, int n) { return d + n; } plus(int, double) plus(double, int) החתימות:
העמסה (overloading) של פונקציות מותר לתת לפונקציות שונות את אותו שם בתנאי שיש להן חתימות שונות דוגמה: public static int plus(int n, double d) { return n + (int) d; } // (I) public static double plus(double d, int n) { return d + n; } // (II) public static void main(string[] args) { int x = 2 ; double y = 2.5 ; } System.out.println(plus(x,y)); // (I) System.out.println(plus(y,x)); // (II) System.out.println(plus(x,x)); // ambiguous System.out.println(plus(y,y)); // no match שימוש:
תוכן עניינים טיפוסים מורכבים מחרוזת מספר מופעים של תו במחרוזת חתימה של פונקציה מעטפות (לטיפוסים הפרימיטיביים)
מעטפות (wrappers) של הטיפוסים הפרימיטיביים ראינו את הטיפוסים הפרימיטיביים byte, short, int, long, float, double, char, boolean לכל טיפוסי פרימיטיבי יש טיפוס מורכב שעוטף אותו Byte, Short, Integer, Long, Float, Double, Character, Boolean המוטיבציה שאפשר יהיה לטפל בכל סוגי הנתונים ב- Java כבטיפוסים מורכבים נראה את החשיבות בהמשך
Integer Integer n = new Integer(123); Integer m = 123; System.out.println(n == m); // false System.out.println(n.equals(m)); // true System.out.println(n == 123); // false int x = m.intvalue(); int y = n + x ; // n.intvalue() + x System.out.println(x); // 123 System.out.println(y); // 246 int z = n + m ; // n.intvalue() + m.intvalue() System.out.println(z); // 246 System.out.println(n == x); // false
Integer String numstring = "-123" ; Integer num = Integer.parseInt(numString) ; Integer המרה ממחרוזת ל- System.out.println(numString); // -123 System.out.println(num); // -123 numstring = numstring + 456 ; // -123456 num = num + 456 ; // 330 System.out.println(numString); // -123456 System.out.println(num); // 330
Integer המרה של Integer למחרוזת בבסיסים שונים Integer n = 123 ; System.out.println(Integer.toString(n, 2)); // 1111011 System.out.println(Integer.toString(n, 7)); // 234 System.out.println(Integer.toString(n, 8)); // 173 System.out.println(Integer.toString(n, 10)); // 123 System.out.println(Integer.toString(n, 16)); // 7b
תוכן עניינים טיפוסים מורכבים מחרוזת מספר מופעים של תו במחרוזת חתימה של פונקציה מעטפות (לטיפוסים הפרימיטיביים) המרה ממחרוזת למספר
המרה של מחרוזת למספר public static void main(string[] args) { System.out.println(toInt("161")); // 161 System.out.println(toInt("0241")); // 161 System.out.println(toInt("0xA1")); // 161 }
המרה של מחרוזת למספר public static int toint(string s) { int base; // 8,10 or 16 int first; // Where does the number part start if (s.charat(0)!= '0' s.length() == 1) { // decimal number first = 0; base = 10; } else if (s.charat(1)!= 'x') { // octal numbers start with 0 first = 1; base = 8; } else { // hexadecimal number start with 0x first = 2; base = 16; } int value = 0, power = 1; for (int i = s.length() - 1; i >= first; i = i - 1) { value = value + toint(s.charat(i)) * power; power = power * base; } return value; }
המרה של מחרוזת למספר public static int toint(char c) { return "0123456789ABCDEF".indexOf(c); }