עבור לתוכן

מתודות ב-JAVA

Featured Replies

פורסם

התחלתי ללמוד מ"JAVA על כוס קפה" והגעתי למתודות שאני לא מצליח כל כך להבין..

הנה תכנית שהפלט שלה הוא תוצאות החזקות של המספרים 2 ו-3 בכל המספרים מ0 עד 9:




public class Functions {
public static int power (int base, int n) {
int result=1;
for(int i=1;i<=n;i++)
result=result*base;
return result;


}


public static void main(String[] args) {
int res1, res2;
System.out.printf("%-4s %-13s %-13s%n", "i", "power(2,i)", "power(3,i)");
System.out.printf("%-4s %-13s %-13s%n","-", "----------", "----------");

for(int i=0; i<=9; i++) {
res1=power(2,i);
res2=power(3,i);
System.out.printf("%-4d %-13d %-13d%n", i, res1, res2);
}
}
}

יש כמה דברים שאני לא מצליח להבין:

1. סדר הפעולות בתכנית

2. השימוש ב-base,n,result ומה ההשפעה שלהם על התכנית

תודה רבה לעוזרים

פורסם

הקוד תמיד מתחיל לרוץ מה-main (יש סייגים לזה, אבל לא נתייחס אליהם כרגע), בלי קשר לסדר שבו הוא כתוב.

נסה לקרוא על פונקציה בויקיפדיה.

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

עכשיו נניח שיש מקום אחר בתכנית שצריך שוב לחשב חזקה. מה תעשה? תעתיק ותדביק את הקוד שכתבת במקור? לא, כי זה בזבזני.

מה שעושים זה להגדיר מתודה (שנקראת גם פונקציה, יש הבדל בין המושגים אבל לא נתקטנן עליו) שמבצעת את הפקודות הנ"ל. ברגע שכתובה כזו מתודה, אז אפשר להפעיל אותה ("לקרוא" לה) מכל מיני מקומות שונים בתכנית, והיא תפעל בכל אחד מהם.

אבל מה, לא נרצה שהמתודה תהיה קבועה לחלוטין - לפעמים נרצה לחשב את 2 בחזקת 3, לפעמים את 3 בחזקת 5 וכן הלאה. אז את המספרים 2 ו-3 אנחנו מעבירים כ"פרמטרים" או "ארגומנטים" למתודה - זה המשמעות של base ו-n.

המתודה power בעצם אומרת "בהינתן זוג מספרים, base ו-n, אני מחשבת את base בחזקת n ומחזירה את התוצאה".

יש מבין?

פורסם
  • מחבר

זה יהיה שקר אם אני אגיד שהבנתי..

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

כל הנושא הזה של מתודות בספר נראה לי קצת מסורבל למתחיל..

פורסם
  • מחבר

הרבה יותר ברור ממקודם זה בטוח..

בmain כל פעם שכתוב power זה בעצם מריץ את הפונקציה?

ובנוסף, עדיין לא הצלחתי להבין את התפקיד של result, אולי אם תוכל לתת לי דוגמא מספרית במילים זה יעזור

אגב, תודה רבה על ההשקעה בהסבר

פורסם

בmain כל פעם שכתוב power זה בעצם מריץ את הפונקציה?

כן.

ובנוסף, עדיין לא הצלחתי להבין את התפקיד של result, אולי אם תוכל לתת לי דוגמא מספרית במילים זה יעזור

זה משתנה ששומר את התוצאה הזמנית של חישוב החזקה.

נניח שהיית מחשב את 3 בחזקת 5 באמצעות דף ועט. איך היית עושה את זה? קודם כל היית כותב את 3 על הדף. היית כופל אותו ב-3, וכותב את התוצאה על הדף. היית כופל את התוצאה הזו ב-3 וכותב את התוצאה החדשה על הדף. ככה היית ממשיך עד שכפלת את 3 בעצמו 5 פעמים. התוצאה שכתובה לך על הדף היא בדיוק 3 בחזקת 5.

אז המשתנה result שקול בדיוק לתוצאה הזמנית שכתבת על הדף בכל שלב.

פורסם
  • מחבר

טוב אז רק לוודא שהבנתי..

res1=power(2,i)

i הוא מספר מסוים, 3 לצורך העניין. אז זה כביכול הולך לפונקציה הראשונה ו-n הוא 3 לצורך החישוב שם?

פורסם
  • מחבר

מעולה תודה רבה!

אגב שאלה שנזכרתי בה רק עכשיו:

תפקיד return זה בעצם לקשר בין המתודות?

פורסם

סוג של. כמו שהמתודה מקבלת קלט מסוים (הפרמטרים base ו-n), היא גם יכולה להוציא פלט מסוים. הפקודה שמוציאה את הפלט הזה היא return.

שים לב לשורת ההצהרה של המתודה:

public static int power (int base, int n)

ה-int שהדגשתי הוא מה שמציין שהפונקציה מחזירה int (דהיינו מספר שלם), כלומר זה אומר שאפשר לשים את התוצאה של הפונקציה במשתנה מסוג int. אם הצהרת שהפונקציה מחזירה int, אז אתה חייב לכתוב בסופה שורה עם return X, כש-X הוא int כלשהו.

פורסם
  • מחבר

תודה, עזרת לי מאוד (-:

פורסם

שניצל, נראה לי שהשאלות ותשובות בדיון הזה הן כלליות מאד ומתאימות לFAQ אולי כדאי לבנות כזה (או להוסיף אם כבר יש)

פורסם

רעיון טוב,

יש כזה דיון, הוא הסטיקי הראשון כאן בפורום. :)

כמו שרשמתי בסטיקי, הוא עדיין בבנייה ולכן פתוח להצעות.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים