פורסם 2010 באוגוסט 2215 שנים צהריים טובים.. אני עושה מבחנים לדוגמא לקראת בחינה בג'אווההתבקשתי לכתוב שיטה שמקבלת 2 מערכים של מס' שלמים ממוינים ומחברת אותם למערך אחד ממויןהשיטה חייבת להיות רקורסיבית, החתימה הראשונה זו החתימה שהתחייבתי להשתמש בה ועשיתי עליה אוברלואדינגמשום מה אני לא מסוגל להריץ ולבדוק אם זה עובד טוב.. הקומפיילר לא מפסיק לחשוב(השיטה חייבת להיות רקורסיבית ללא לולאות כלל)אם מישהו יוכל לעזור לי אני אודה לו.. תודהלהלן הקודpublic class Merge{ public static int [] merge (int [] ar1, int [] ar2) { int [] ar3 = new int [ar1.length+ar2.length]; return merge(ar1, ar2, ar3, 0, 0, 0 ); //ar3=total length } public static int [] merge(int [] ar1, int [] ar2, int [] ar3, int i, int j, int wtp) //wtp=where to put in ar3, i=tmp to ar1, j=tmp to ar2 { if(i<ar1.length && j <ar2.length) //checking outbanding { if (ar1[i] < ar2[j] ) { ar3[wtp]=ar1[i]; i++; wtp++; merge(ar1, ar2, ar3, i, j, wtp); } else ar3[wtp]=ar2[j]; j++; wtp++; merge(ar1, ar2, ar3, i, j, wtp); } else { if(i<ar1.length && j== ar2.length) { ar3[wtp]=ar1[i]; wtp++; i++; merge( ar1, ar2, ar3, i, j, wtp); } if(i==ar1.length && j<ar2.length) { ar3[wtp]=ar2[j]; wtp++; j++; merge(ar1, ar2, ar3, i, j, wtp); } } return ar3; } public static void main (String args[]) //tester { int ar1 [ ] = new int [3]; ar1[0]=3; ar1[1]=5; ar1[2]=7; int ar2[] = new int [2]; ar2[0]=4; ar2[1]=6; merge(ar1, ar2);}}תודה רבה
פורסם 2010 באוגוסט 2215 שנים א. תסתכל על ה-else הראשון שלך.ב. למה אתה עושה ++i ו-++wtp במקום פשוט לקרוא לפונקציה merge עם הערכים החדשים? זה סתם מאריך ומכער את הקוד.
פורסם 2010 באוגוסט 2215 שנים מחבר תודה רבה, ערכתי את הקוד שיראה יותר נעים לעין והוספתי סוגריים מסולסלים לelse הראשון (נדמה לי שזו הייתה הבעיה)כרגע הוא נותן לי overflow על line15 ומצביע על Line 10 if(i<ar1.length && j <ar2.length) //checking outbandingאני אנסה לחשוב על זה קצתתודה שניצל!להלן הקוד המתוקן (עדיין לא עובר, overflow)public class Merge{ public static int [] merge (int [] ar1, int [] ar2) { int [] ar3 = new int [ar1.length+ar2.length]; return merge(ar1, ar2, ar3, 0, 0, 0 ); //ar3=total length } public static int [] merge(int [] ar1, int [] ar2, int [] ar3, int i, int j, int wtp) //wtp=where to put in ar3, i=tmp to ar1, j=tmp to ar2 { if(i<ar1.length && j <ar2.length) //checking outbanding { if (ar1[i] < ar2[j] ) { ar3[wtp]=ar1[i]; merge(ar1, ar2, ar3, i++, j, wtp++); } else { ar3[wtp]=ar2[j]; merge(ar1, ar2, ar3, i, j++, wtp++); }////big if } else { if(i<ar1.length && j== ar2.length) { ar3[wtp]=ar1[i]; merge( ar1, ar2, ar3, i++, j, wtp++); } if(i==ar1.length && j<ar2.length) { ar3[wtp]=ar2[j]; merge(ar1, ar2, ar3, i, j++, wtp++); } } return ar3; } public static void main (String args[]) //tester { int ar1 [ ] = new int [3]; ar1[0]=3; ar1[1]=5; ar1[2]=7; int ar2[] = new int [2]; ar2[0]=4; ar2[1]=6; merge(ar1, ar2);}}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.