תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods) העברת פרמטרים

Slides:



Advertisements
Similar presentations
Chapter 7 Strings F To process strings using the String class, the StringBuffer class, and the StringTokenizer class. F To use the String class to process.
Advertisements

1 Working with String Duo Wei CS110A_ Empty Strings An empty string has no characters; its length is 0. Not to be confused with an uninitialized.
Java Programming Strings Chapter 7.
Fundamental Programming Structures in Java: Strings.
Strings, Etc. Part I: Strings. About Strings There is a special syntax for constructing strings: "Hello" Strings, unlike most other objects, have a defined.
String StringBuffer. class StringExample { public static void main (String[] args) { String str1 = "Seize the day"; String str2 = new String(); String.
Lab session 3 and 4 Topics to be covered Escape sequences Escape sequences Variables /identifiers Variables /identifiers Constants Constants assignment.
COMP 110 Introduction to Programming Mr. Joshua Stough September 10, 2007.
1 Strings and String Operations  What is a Strings?  Internal Representation of Strings  Getting Substrings from a String  Concatenating Strings 
Week #2 Java Programming. Enable Line Numbering in Eclipse Open Eclipse, then go to: Window -> Preferences -> General -> Editors -> Text Editors -> Check.
Copyright 2006 by Pearson Education 1 Building Java Programs Chapters 3-4: Using Objects.
CS107 Introduction to Computer Science Java Basics.
String Class in Java java.lang Class String java.lang.Object java.lang.String java.lang.Object We do not have to import the String class since it comes.
Objects and Classes; Strings. 2 Classes and objects class: A program entity that represents either 1.A program / module, or 2.A type of objects* –A class.
1 Text processing. 2 text processing: Examining, editing, formatting text.  Text processing often involves for loops that examine the characters of a.
From C++ to Java A whirlwind tour of Java for C++ programmers.
Chapter 7 Strings  Use the String class to process fixed strings.  Use the StringBuffer class to process flexible strings.  Use the StringTokenizer.
Zhen Jiang Dept. of Computer Science West Chester University West Chester, PA CSC141 Computer Science I 5/27/20161.
Chapter 7 Strings F Processing strings using the String class, the StringBuffer class, and the StringTokenizer class. F Use the String class to process.
An Introduction to Java Programming and Object-Oriented Application Development Chapter 7 Characters, Strings, and Formatting.
College Board A.P. Computer Science A Topics Program Design - Read and understand a problem's description, purpose, and goals. Procedural Constructs.
Working with string In java Four classes are provided to work with String:1) String 2)String Buffer 3)String Tokenizer 4)String Builder Note: An object.
Using Java Class Library
BEGINNING PROGRAMMING.  Literally – giving instructions to a computer so that it does what you want  Practically – using a programming language (such.
1 BUILDING JAVA PROGRAMS CHAPTER 3 THE STRING CLASS.
Strings Mr. Smith AP Computer Science A. What are Strings? Name some of the characteristics of strings: A string is a sequence of characters, such as.
Coding Bat: Ends in ly Given a string of even length, return a string made of the middle two chars, so the string "string" yields "ri". The string.
1 BUILDING JAVA PROGRAMS CHAPTER 3 THE STRING CLASS.
Chapter 3A Strings. Using Predefined Classes & Methods in a Program To use a method you must know: 1.Name of class containing method (Math) 2.Name of.
Java String 1. String String is basically an object that represents sequence of char values. An array of characters works same as java string. For example:
Spring 2009 Programming Fundamentals I Java Programming XuanTung Hoang Lecture No. 8.
Data Types References:  Data Type:  In computer science and computer programming, a data type or simply type is a.
Chapter 8: Loops, Arrays, Strings Loop statements –do –while –for Arrays –declaration, allocation, initialization, access –multi-dimensional –heterogeneous.
(Dreaded) Quiz 2 Next Monday.
Chapter 8 String Manipulation
String and StringBuffer classes
C# - Strings.
Lecture 8: The String class
Building Java Programs
CSCI 161 – Introduction to Programming I William Killian
Strings.
Building Java Programs
Chapter 6 GC 101 Strings.
Strings string: An object storing a sequence of text characters.
Programming in Java Text Books :
String and String Buffers
CISC124 Labs start this week in JEFF 155: Meet your TA.
String Handling in JAVA
Topic 13 procedural design and Strings
תרגול 1: סביבת העבודה ומבוא ל-Java
תרגול 1: סביבת העבודה ומבוא ל-Java
תרגול 1: סביבת העבודה ומבוא ל-Java
Modern Programming Tools And Techniques-I Lecture 11: String Handling
Chapter 7: Strings and Characters
Object Oriented Programming
MSIS 655 Advanced Business Applications Programming
Introduction to Java Programming
An Introduction to Java – Part I, language basics
תרגול 1: סביבת העבודה ומבוא ל-Java
Building Java Programs
16 Strings.
Lecture 8: The String Class and Boolean Zen
Lecture 14: Strings and Recursion AP Computer Science Principles
Building Java Programs
String Methods.
Strings in Java.
Building Java Programs
Strings string: An object storing a sequence of text characters.
In Java, strings are objects that belong to class java.lang.String .
Strings in Java Strings in Java are also a reference type.
Presentation transcript:

תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods) העברת פרמטרים תוכנה 1 תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods) העברת פרמטרים

שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב פיתוח התוכנית בשלב זה אנו משתמשים במהדר (קומפיילר) כדי להמיר קבצי .java (קבצי טקסט הקריאים למתכנת) לקבצי .class שנועדו עבור המפרש (אינטרפרטר). קומפילציה תכנות מתקדם בשפת Java אוניברסיטת תל אביב

שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב הרצת התוכנית בשלב זה אנו משתמשים במפרש כדי להריץ את קבצי ה-class שיצרנו. ב-Java אותו קובץ class יכול לרוץ בסביבות שונות אם קיים עבורן מפרש. הרצה תכנות מתקדם בשפת Java אוניברסיטת תל אביב

שלבי הפיתוח – חזרה קצרה ה-JDK (Java Development Kit) נדרש לתהליך הפיתוח קומפיילר ה-JRE (Jave Runtime Environment) נדרש להרצת תוכניות JVM (Java Virtual Machine) הספריות הסטנדרטיות תכנות מתקדם בשפת Java אוניברסיטת תל אביב

Java Virtual Machine ה-JVM היא "מכונה וירטואלית" המריצה תוכניות Java יודעת לטעון תוכניות יודעת לוודא את תקינות הקבצים הנטענים מכילה את המפרש (Interpreter) תכנות מתקדם בשפת Java אוניברסיטת תל אביב

העברת פרמטרים תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מה יהיה פלט התכנית הבאה? תשובה: 3 למה?? תכנות מתקדם בשפת Java אוניברסיטת תל אביב

By value, By reference העברת פרמטרים by value: הפרמטר למעשה מועתק, נוצר עותק נוסף שלו אשר נשלח למתודה. משתנים מועברים by value שינוי פרמטר מטיפוס פרימיטיבי בתוך המתודה לא יראה מחוץ למתודה. אנלוגיה: שליחת מסמך word במייל, אם המקבל משנה את העותק שלו, העותק הנוכחי לא מושפע מכך. תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מה יהיה פלט התכנית הבאה? תשובה: [3, 2, 1] [4, 3, 2] למה??

By value עבור אובייקטים עדיין מועבר עותק by value, אבל הפעם זה עותק של הרפרנס לאובייקט שנמצא ב-heap. כך שגם הרפרנס המקורי וגם העותק מצביעים לאותו האובייקט. שינוי הפרמטר בתוך המתודה נשמר גם מחוץ למתודה אנלוגיה: שליחת כתובת של גוגל דוק, כל שינוי שצד אחד עושה במסמך, נראה גם אצל הצד השני. תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מה יהיה פלט התכנית הבאה? תשובה: [3, 2, 1] למה??

By value כאשר מעבירים משתנה מטיפוס הפניה, הכתובת עצמה מועתקת by value. נחזור לדוגמת הגוגל דוק: נניח ששלחנו למישהו כתובת של מסמך גוגל דוק, והוא מחק את הכתובת. האם אצלנו הכתובת נמחקה גם??

מחרוזות (Strings) תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מחרוזות - חזרה מחרוזות הן אובייקטים המכילים רצף של תווים. String s = “Hello”; כל אלמנט במחרוזת הוא מסוג char. האינדקס של התו הראשון הוא 0. אורך המחרוזת מוחזר ע"י הפונקציה length() שרשור מחרוזות נעשה ע"י האופרטור + String s2 = s + “ World” + 5 // “Hello World5” index 1 2 3 4 character H e l o לשים לב שאפשר לשרשר גם int, ה-casting נעשה באופן לא מפורש

מחרוזות - השוואה נניח ונרצה להשוות שתי מחרוזות (לבדוק האם הן שוות). public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String ("hello"); System.out.println(s1.equals(s2)); System.out.println(s1 == s2); } מה יודפס למסך? למה? true false ההשוואה הראשונה בודקת האם התוכן שווה, ההשוואה הראשונה משווה כתובות בין אובייקטים כדי להשוות שתי מחרוזות מבחינת תוכנן יש להשמש בפונקצייה equals() ולא באופרטור == שבודק אם מדובר באותו אובייקט

מחרוזות – פונקציות בדיקה Method Description equals(str) whether two strings contain the same characters equalsIgnoreCase(str) whether two strings contain the same characters, ignoring upper vs. lower case startsWith(str) whether one contains other's characters at start endsWith(str) whether one contains other's characters at end contains(str) whether the given string is found within this one

מחרוזות – פונקציות שימושיות Method name Description indexOf(str) index where the start of the given string appears in this string (-1 if not found) substring(index1, index2) or substring(index1) the characters in this string from index1 (inclusive) to index2 (exclusive); if index2 is omitted, grabs till end of string toLowerCase() a new string with all lowercase letters toUpperCase() a new string with all uppercase letters המימוש של הפונקציות לעיבוד מחרוזות יחזיר תמיד מחרוזת חדשה ולא יבצע שינויים על המחרוזת המקורית שעליה נקראה הפונקציה (Strings are immutable in Java)!!.

מחרוזות – פיצול לחלקים Method name Description split(DelimiterString) Splits the string into tokens using the given delimiter string. Returns an array of Strings. String str= “Another useful example"; String[] tokens = str.split(“ ”); //tokens = {“Another”,”useful”,”example”}

הדפסת מחרוזות ומספרים int a=1805; double d=123.456789; System.out.println ("a=" + a); //"a=1805"; System.out.format ("a=%d\n",a); //"a=1805"; System.out.format ("d=%.2f%n",d); //"d=123.46" System.out.format ("d=%20.10f%n",d); //"d= 123.4567890000" %n - platform-specific line separator %d – decimanl %f – float http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

מתודות Methods)) בניית תוכנית תוך שימוש ראוי במתודות הנושא יועבר על ידי דוגמא: maxSpan תכנות מתקדם בשפת Java אוניברסיטת תל אביב

Span - הגדרה בהינתן מערך של מספרים וערך כלשהו נגדיר את ה- span של הערך כמספר האברים (כולל) בין שני המופעים הקיצוניים של הערך במערך. דוגמאות: המערך [1,2,1,1,3] והערך 1 – ה span הוא 4 המערך [1,4,2,1,1,4,1,4] והערך 1 – ה span הוא 7 המערך [1,4,2,1,1,4,1,4] והערך 2 – ה span הוא 1

Max Span Max-Span יהיה ה span המקסימלי על פני כל הערכים במערך מסוים דוגמאות: המערך [1,2,1,1,3] – ה-maxSpan הוא 4 המערך [1,4,2,1,1,4,1,4] – ה-maxSpan הוא 7

נתחיל לעבוד נפתח פרויקט חדש בשם MaxSpan נתחיל לכתוב תכנית בדיקה לפתרון שלנו 23 23

תכנית בדיקה נגדיר מחלקה חדשה עבור הבדיקות il.ac.tau.cs.sw1.maxspan.tests.TestMaxSpan החלק הראשון - חבילה (package) http://en.wikipedia.org/wiki/Java_package כעת נכתוב את המקרים שנרצה לבדוק: 24 24

תכנית בדיקה זוהי למעשה הפונקציית main 25 25

ועכשיו לפתרון public static int maxSpan(int[] array) { int max = 0; for (int i = 0; i < array.length; i++) { int j = array.length - 1; for ( ; j >= i; j--) { if (array[i] == array[j]) { break; } int span = j - i + 1; if (max < span) { max = span; return max; 26 26

בדיקה, Refactor ושדרוג הקוד (?) נבדוק שתכנית הבדיקה עובדת בואו נכתוב את הפונקציה בצורה יותר "נכונה" דיון: כתיבת הפונקציה בצורה "נכונה" יעילות מודולריות, פתרון Top-down הבנת הקוד אפשרות לשינויים עתידיים 27 27

נרצה לעבור על כל ערך פעם אחת בלבד (יעילות) הפונקציה הראשית נרצה לעבור על כל ערך פעם אחת בלבד (יעילות) public static int maxSpan(int[] nums) { int max = 0; for (int value: values(nums)) { max = Math.max(max, span(value, nums)); } return max; 28 28

וחלק מפונקציות העזר private static int span(int value, int[] nums) { return lastIndexOf(value, nums) - firstIndexOf(value, nums) + 1; } private static int[] values(int[] nums) { int[] values = new int[nums.length]; int nextIndex = 0; for (int i = 0; i < nums.length; i++) { if (!contains(values, nextIndex, nums[i])) { add(values, nextIndex++, nums[i]); } return Arrays.copyOf(values, nextIndex); 29 29

והשאר private static int lastIndexOf(int value, int[] nums) { for (int i = nums.length - 1; i >=0; i--) { if (nums[i] == value) { return i; } // should never get here return -1; private static int firstIndexOf(int value, int[] nums) { int index = -1; for (int i = 0; i < nums.length; i++) { index = i; break; return index; 30 30

והשאר private static void add(int[] values, int position, int value) { values[position] = value; } private static boolean contains(int[] temp, int tempLength, int value) { for (int i = 0; i < tempLength; i++) { if (temp[i] == value) { return true; return false; 31 31

int maxSpan(int[]){…} תכנון "top-down" int maxSpan(int[]){…} For each value in the array Compute its span in the array Return the largest span found int[] values(int[]){…} int span(int, int[]){…} Create an empty output array For every element in the input array If the output array does not already contain the current value, add it to the output array Find the first occurrence of value Find the last occurrence of value Span = last - first +1 int firstIndexOf (int, int[]){…} int lastIndexOf (int, int[]){…} … … boolean contains(int[], int, int) void add(int[], int, int){…} We also need to adjust the output array size… 32 32

סיכום מה ההבדל העיקרי בין שני הפתרונות לבעיית ה-maxSpan? מדוע הפיתרון השני, על אף היותו ארוך יותר, הוא עדיף? דרך העבודה על תכנית צריכה להיות top-down. נתחיל מבדיקות: נגדיר מהי התנהגות נכונה של התכנית. רק לאחר מכן נעבור למימוש עצמו. נחלק לפונקציות בצורה בה כל פונקציה אחראית על פעולה אחת בלבד. נבנה תכנית מודולרית ככל הניתן.

הסוף... 34