עבור לתוכן

עשיתי שיטה בג'אווה הבעיה שהיא לא רצה טוב (הזמן ריצה שלה לא נגמר..), צריך כיוון

Featured Replies

פורסם

צהריים טובים.. אני עושה מבחנים לדוגמא לקראת בחינה בג'אווה

התבקשתי לכתוב שיטה שמקבלת 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);
}
}

תודה רבה

פורסם

א. תסתכל על ה-else הראשון שלך.

ב. למה אתה עושה ++i ו-++wtp במקום פשוט לקרוא לפונקציה merge עם הערכים החדשים? זה סתם מאריך ומכער את הקוד.

פורסם
  • מחבר

תודה רבה, ערכתי את הקוד שיראה יותר נעים לעין והוספתי סוגריים מסולסלים ל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);
}
}

ארכיון

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

דיונים חדשים