שפת Java – הפעם נלמד arrays.
הדפסת מערך
הדפסת מערך, כאשר כל פעם יש
הורדת שורה [n/]
double[] myList = {0.9,4.6,2.1}; for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " ");//0.9 /n 4.6 /n 2.1 }
הסבר:
הגדרנו מערך myList מסוג double (מספרים לא שלמים)
לאחר מכן יש הרצה על מערך כולו תוך שימוש ב-for
למעשה בהתחלה i=0
לכן:
myList[0]=0.9
בלולאה הבא i=1
לכן:
myList[1]=4.6
וכך עד myList.length כי
for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " ");//0.9 /n 4.6 /n 2.1 }
כלומר עד שה-i פחות משלוש:
for (int i = 0; i < 3; i++) { System.out.println(myList[i] + " ");//0.9 /n 4.6 /n 2.1 }
שזה אורך המערך 3 כך שערך אחרון של i זה 2.
לכן כאשר i=2, יודפס:
myList[2]=2.1
מערך דו ממדי:
int[][] foo = new int[][] { new int[] { 1, 2, 3 }, new int[] { 1, 2, 3, 4}, }; System.out.println(foo.length); //2 System.out.println(foo[0].length); //3 System.out.println(foo[1].length); //4 System.out.println(foo[1][2]);// 3
הסבר:
הגדרנו מערך דו ממדי בשם foo
1,2,3
1,2,3,4
למעשה במערך דו-מימדי יש שתי שורות:
שורה ראשונה 1,2,3
ושורה שניה 1,2,3,4
בעזרת foo.length מקבלים כמה שורות יש במערך -2
בעזרת foo[0].length מקבלים כמה איברים יש בשורה ראשונה – 3
בעזרת foo[1].length מקבלים כמה איברים יש בשורה השנייה- 4
-
בעזרת [2][1]foo ניתן למצוא את האיבר במערך אשר נמצא בשורה 1 ועמודה 2 שזה 3 * ספירה מאפס
-
בעזרת [2][0]foo ניתן למצוא את האיבר במערך אשר נמצא בשורה 0 ועמודה 2 שזה 3 * ספירה מאפס
-
בעזרת [1][0]foo ניתן למצוא את האיבר במערך אשר נמצא בשורה 0 ועמודה 1 שזה 2 * ספירה מאפס
קבלת מערך כאובייקט לפונקציה
קבלת מערך כאובייקט לפונקציה והחזרת מערך עם ערכים מהסוף להתחלה
public class Main { public static void main(String[] args) { double[] myList = {0.9,4.6,2.1}; myList=reverse(myList); for (int i = 0; i < myList.length; i++) { System.out.println(myList[i]);//2.1, 4.6, 0.9 } } public static double[] reverse(double[] myList) { double[] result = new double[myList.length];//3 for (int i = 0, j = result.length - 1; i < myList.length; i++, j--) { result[j] = myList[i];//2.1, 4.6, 0.9 } return result;//return Array: 2.1, 4.6, 0.9 } }
הסבר:
הגדרנו מערך myList מסוג double
double[] myList = {0.9,4.6,2.1};
לאחר מכן פונקציה reverse מקבלת מערך myList וגם מחזירה מערך.
myList=reverse(myList);
כלומר פונקציה מחזירה מערך {2.1,4.6,2,0.9}:
myList= {2.1, 4.6,2, 0.9}
אבל הפונקציה reverse עושה את זה?
תשובה:
נגדיר פונקציה reverse אשר מקבלת מערך חד מימדי – myList מסוג double
public static int[] reverse(double[] myList) { }
לאחר קבלת מערך myList בפונקציה, נוכל להגדיר מערך זמני בשם result
int[] result = new int[myList.length];
באורך 3 כי
myList.length=3 לכן int[] result = new int[3];
לאחר מכן אנו מוצאים את האיבר אחרון אשר נמצא במערך myList
for (int i = 0, j = result.length - 1; i < myList.length; i++, j--) { result[j] = myList[i];//2.1, 4.6, 0.9 }
שזה כמו:
* result.length=3
* myList.length=3
for (int i = 0, j = 3 - 1; i < 3; i++, j--) { result[j] = myList[i];//2.1, 4.6, 0.9 }
או
for (int i = 0, j = 2; i < 3; i++, j--) { result[j] = myList[i];//2.1, 4.6, 0.9 }
ולכן
result[j] = myList[i]; שזה result[2] = myList[0]=0.9
עם זאת מכיוון שעכשיו:
* i=0
* j=2
i++, j-- אז i=1 גדל ב-1 j=1 קטן ב-1
אז בהרצה הבאה של for
result[j] = myList[i]; שזה result[1] = myList[1]=4.6
לאחר מכן
i++, j-- אז i=2 גדל ב-1 j=0 קטן ב-1
ולכן
result[j] = myList[i]; שזה result[0] = myList[2]=2.1
זאת אומרת במערך result יש מערך הפוך מזה שהתקבל בפונקציה reverse
ובסוף אנו מחזרים את המערך הפוך הזה
return result;//return Array: 2.1, 4.6, 0.9
ואז מדפיסים את המערך myList
myList=reverse(myList); for (int i = 0; i < myList.length; i++) { System.out.println(myList[i]);//2.1, 4.6, 0.9 }