25
מבוא לתכנות ב- JAVA מעבדה4

JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

JAVA-מבוא לתכנות ב4מעבדה

Page 2: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

מה בתרגול

(3סוף מעבדה )חזרה –ניפוי שגיאות •

מערכים•

Page 3: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

Debugging within Eclipse

קביעתbreakpoint

Page 4: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

Debugging within Eclipse

Page 5: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

debugמצב

Page 6: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

קידום בצעדביצוע צעד

Page 7: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

טבלת משתנים

Page 8: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

תרגיל

practicalהנמצא ב Calc.javaפתחו את הקובץ •sessionsבeclipse

תקנו את התוכנית כך שהתוכנית תציג את •

הפלטים הנכונים

?מהם שגיאות הקומפילציה–

?האם ישנן שגיאות לוגיות בתוכנית–

?האם ייתכנו שגיאות בזמן ריצה–

Page 9: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

מערך חד מימדי

מערך הוא מבנה המחזיק סדרה של איברים מאותו טיפוס•

(נקבע בעת יצירת המערך)גודל המערך הוא קבוע •

הגישה לכל איבר היא באמצעות אינדקס•

Page 10: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

?למה לי מערך

כאשר יש צורך לשמור מספר גדול של משתנים •

מאותו סוג

מבנה מאורגן המאגד בתוכו קבוצה גדולה של •

ערכים שניתן לעבור עליהם באופן שיטתי

Page 11: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

יצירת מערך וגישה לאיבריו

int[] arrayOfInts = new int[10];

סוגריים מרובעים

מציינים שאנו

מגדירים מערך

10מערך בגודל

:intשאיבריו מטיפוס 10יצירת מערך בגודל •

: דוגמא לפקודות עם פנייה לאיברים במערך•

arrayOfInts[0] = 5; //set element at index 0 to be 5

int num = arrayOfInts[3];

כל הערכים במערך יאותחלו לפי ערך ברירת , כאשר מגדירים מערך: הערה0כל הערכים במערך יהיו intלדוגמא עבור )java-מחדל שמוגדר ב

(בהתחלה

Page 12: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

פעולות נוספות

int[] arr = {1,1,2,3,5,8};

1,1,2,3,5,8עם האיברים 6מגדיר מערך בגודל

1 1 2 3 5 8

:אתחול+ תחביר מקוצר ליצירת מערך •

משתנה פנימי המציין את גודל המערך•

System.out.println(arr.length);

Page 13: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

שגיאה נפוצה בעבודה עם מערכים

•java.lang.ArrayIndexOutOfBoundsException

זוהי שגיאת זמן ריצה שנובעת מכך שבקוד שלכם •

ניסיתם לפנות לאיבר במערך עם אינדקס שלא

.נמצא בתחום

:דוגמא לקוד שייגרום לשגיאה זו•int[] arr = new int[6];

...

System.out.println(arr[6]);

Page 14: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

השוואה של מערכים–דוגמא

כאשר נרצה לבדוק אם שתי מערכים שווים לא •

==נוכל להשוות ביניהם בעזרת

.נצטרך לבדוק אם האיברים בתוך המערך שווים•

Page 15: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

השוואה של מערכים–דוגמא

public static void main(String[] args){

int[] a = {…};

int[] b = {…};

boolean areEqual = (a.length == b.length);

for(int i = 0; areEqual && i < a.length; i++){

if (a[i] != b[i]){

areEqual = false;

}

{System.out.println(areEqual);

}

Page 16: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

תרגיל

?מה יודפס•

6 5 4 3 2 1. א

5 3 2 1 1 0. ב

8 5 3 2 1 1. ג

5 3 2 1 1 1. ד

public static void main(String[] args){

int[] arr = new int[6];

for (int i = 0; i < arr.length; i++){

if (i < 2){

arr[i] = 1;

}

else{

arr[i] = arr[i-1] + arr[i-2];

}

System.out.print(arr[i] + " ");

}

}

Page 17: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

תרגיל

כתבו תוכנית שמגדירה מערך של מספרים שלמים •. וקולטת לתוכו ערכים10בגודל

, התוכנית תחשב ותדפיס את סכום איברי המערךהאיבר המקסימלי והאיבר המינימלי במערך

Page 18: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

תבנית לפתרון

public static void main(String[] args){

int[] arrOfInts = new int[10];

Scanner sc = new Scanner(System.in);

int sum = 0;

int max,min;

// gets input

System.out.println("Please enter 10 numbers");

for (int i = 0; i < arrOfInts.length; i++){

arrOfInts[i] = sc.nextInt();

}

//computes the sum,max,min of the elements in the array

System.out.println("(sum,min,max) = (" +sum+ ",“ +min+ "," +max+ ")");

}

השלימו את הקוד כאן

Page 19: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

פתרוןpublic static void main(String[] args){

int[] arrOfInts = new int[10];

Scanner sc = new Scanner(System.in);

int sum = 0;

int max,min;

// gets input

System.out.println("Please enter 10 numbers");

for (int i = 0; i < arrOfInts.length; i++){

arrOfInts[i] = sc.nextInt();

}

//computes the sum,max,min of the elements in the array

min = arrOfInts[0];

max = arrOfInts[0];

for(int i=0; i < arrOfInts.length; i++){

if (min > arrOfInts[i]){

min = arrOfInts[i];

}

if (max < arrOfInts[i]){

max = arrOfInts[i];

}

sum += arrOfInts[i];

}

System.out.println("(sum,min,max) = (" +sum+ ",“ +min+ "," +max+ ")");

}

Page 20: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

אינדקס אמצעי במערך–תרגיל אינדקס אמצעי במערך הוא תא אשר סכום האיברים :הגדרה•

במערך עד אליו וכולל שווה לסכום האיברים במערך הנמצאים

.הלאה ממנו

מספרים שלמים מהמשתמש לתוך מערך 10כתבו תוכנית הקולטת •

התוכנית תדפיס את . ובודקת האם קיים אינדקס אמצעי במערך

.האינדקס האמצעי במידה ויש כזה

האינדקס האמצעי [3-,1-,1,2,4,6,10,3,2,2]המערך עבור: דוגמא•

13והסכום עד אליו כולל אותו הוא 6בדוגמא זו הוא 3ערכו של אינדקס )3הוא

(וגם ממנו ועד לסוף המערך

Page 21: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

?מה עושים–במערך אינדקס אמצעי –תרגיל

.נסכם ונשמור במשתנה עזר את סכום כל האיברים במערך•

נרוץ בלולאה נוספת מתחילת המערך ונחשב סכום איברים עד •

לאינדקס בו סכום הביניים שווה להפרש בינו לבין סכום המערך iאם קיים כזה סכום נדווח על כך ונחזיר את (. היתרה)הכולל

...אם לא והגענו לסוף המערך לא נדווח דבר( המונה)

Page 22: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

פתרוןpublic static void main(String[] args){

int[] arr = new int[10];

Scanner sc = new Scanner(System.in);

int sum = 0;

int partialSum = 0;

boolean foundMiddleIndex = false;

for(int i = 0; i < arr.length; i++){

arr[i] = sc.nextInt();

sum += arr[i];

}

partialSum = 0;

for(int i = 0; i < arr.length && !foundMiddleIndex; i++){

partialSum += arr[i];

if (sum - partialSum == partialSum){

System.out.println("middle index is " + i);

foundMiddleIndex = true;

}

}

}

Page 23: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

תת מערך עם סכום מקסימלי-תרגיל

בהינתן מערך של מספרים שלמים עליכם לכתוב תוכנית שמוצאת •(. רצף של תאים במערך)שלו את הסכום המקסימלי של תת מערך

.השלימו את הקוד כך שיודפס הסכום המקסימלי

תת המערך עם [5,4-,1,2,1-,3,4-,2,1-]: עבור המערך : דוגמא•

.6וסכומו [1,2,1-,4]הסכום המקסימלי הוא

public static void main(String[] args) {

int[] arr =…;

//assume that arr is already initialized with values

//Fill here the code

System.out.println(maxSubArraySum);

}

Page 24: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

רעיון לפתרון

נסכום כל תת מערך תוך שימוש בשני אינדקסים •

לציון נקודת ההתחלה והסיום של כל תת מערך

שאנו סוכמים ונעדכן את המקסימום במידת הצורך

קיים פתרון יעיל יותר שמוצא את הסכום בזמן •לינארי

-2 1 -3 4 -1 2 1 -5 4

Page 25: JAVA -ב תונכתל אובמ 4 הדבעמipc172/wiki.files/PS4.pdfידמימ דח ךרעמ סופיט ותואמ םירביא לש הרדס קיזחמה הנבמ אוה ךרעמ

פתרון

public static void main(String[] args){

int arr[] = {-2,1,-3,4,-1,2,1,-5,4};

int maxSubArraySum = arr[0];

int currentSum;

for(int i = 0; i < arr.length; i++){

currentSum = 0;

for(int j = i; j < arr.length; j++){

currentSum += arr[j];

if (currentSum > maxSubArraySum){

maxSubArraySum = currentSum;

}

}

}

System.out.println(maxSubArraySum);

}