שאלה ב-Java...

MotiAd

New member
שאלה ב-Java...

public int init(int num) {//}​
נניח ויש לי פונקציה כזאת. איך אני גורם לכך שהפונקציה תוכל לשנות את הערך של num יעני כמו פוינטרים ב-C. מוטי
 
נדמה לי שאי אפשר- זה מועבר by value

java מעבירה ארגומנטים לפונקציות by value בלבד, אז אין כ"כ דרך לעשות את זה. מצורף קישור למאמר שמסביר בקצרה ובבהירות את הנושא.
 

jolp

New member
מה שכן אפשר לעשות..

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

voguemaster

New member
הצעה

ראשית, נבהיר שני דברים: 1. בג´אווה, טיפוסים בסיסיים כמו int, double, char וכו´, מועברים ע"י הערך, by value כמו שאומרים, ואין דרך אחרת. היות וג´אווה לא תומכת במצביעים אלא רק ברפרנסים, אי אפשר להעביר מצביע לשלם ולשנות את המספר בתוך פונקציה. 2. בג´אווה, אובייקטים (כל דבר מעבר לטיפוס בסיסי) מועברים בצורה אחרת. למעשה, הרפרנס שלהם מועבר, בדיוק כמו העברת רפרנס ב-CPP. לכן בג´אווה אפשר לשנות אובייקט אם הועבר לפונקציה, וגם אפשר להחזיר אובייקט או אובייקט שמייצג מערך של אובייקטים לפונקציה הקוראת. ועכשיו, דרך לבצע את מה שביקשת (למרות שקשה לי לראות מצב שבו צריך את זה): העיקרון הוא שאם ממש צריכים לשנות את המשתנה המועבר (ושוב, עוד לא יצא לי שאני צריך דבר כזה, ואני כותב מספיק זמן בג´אווה), אפשר במקום לעבוד עם מחלקה שנקראת Integer. כן זה קצת מרגיז שצריך לעבוד עם אובייקט במקום לעבוד עם טיפוס בסיסי, אבל זו הדרך היחידה לבצע את הדבר הזה.. דוגמא:
public Integer sqr( Integer num) { // calculate num*num int n = num.intValue(); n *= n; return new Integer( n); }​
והקוד הקורא לפונקציה:
Integer nNum; nNum = new Integer( 5); nNum = sqr( nNum); System.out.println( "Square is: " + nNum.toString());​
כן, שיטה מעצבנת, אני מודה. אין חלופה טובה באמת, אבל בינינו, גם אין צורך לאחת כזו... אני עוד לא נתקלתי במצב כזה..
 
אי אפשר לעשות אותו דבר בלי אוביקט?

הקוד הבא לא יענה על אותה דרישה? :
public int sqr (int num) { num*=num; return num; } int myNum=5; myNum=sqr(myNum); System.out.println (myNum);​
 

voguemaster

New member
אה, הרעיון היה שגוי

אם באמת רוצים אפשר לעשות את זה עם אובייקט של מערך של שלמים (באורך 1
). אפשר להעביר את האובייקט ולשנות את המספר.. לדעתי.
 
למעלה