פורסם 2014 במרץ 3011 שנים שלוםעשיתי את השיטה הזאת -כתבו שיטה במחלקה DrawingBoard בשם getMax שתחזיר את הצורה (מחלקה Shape) בעלת השטח המקסימלי מבין כל הצורות שבלוח. הדפסת פרטי האובייקט המוחזר תהיה בשיטה הראשית.יש לי שיטת עזר בשם compare שבודקת למי יש את השטח הגדול ביותר s זה מערך של Shapepublic Shape getMax(){ int i; int x; for( i=0; i<counter;){for (x=1;x<counter;){if(s[i].Compare(s[x])==1) x++;else if(s[i].Compare(s[x])==-1)i++;else x++;}if(s[i].Compare(s[x])==1) return s[i];else if (s[i].Compare(s[x])==-1) return s[x];else return s[i];}}איפה שרשום getMax יש לי אדום(שגיאה) ורשום לי שאני צריך להחזיר Shape... מה אני צריך לעשות?כל המקומות שיש שם את החלקים מהמערך שמוחזרים הם לא Shape גם ??תודה בכל מקרהאילי
פורסם 2014 במרץ 3011 שנים מחבר תעיף את ה-else האחרוןזה לא קשור אחי, פשוט שיטח העזר Compare בנויה בצורה שהיא מחזירה 1 אם האובייקט המפעיל גדול 2 אם האובייקט המופעל גדול 3 אם הם שוויםאז אני צריך להשאיר את זה לדעתי אני פשוט מחזיר הפנייה אבל אני לא יודע איך לסדר את זה...- - - תגובה אוחדה: - - -תעיף את ה-else האחרוןזה לא קשור אחי, פשוט שיטח העזר Compare בנויה בצורה שהיא מחזירה 1 אם האובייקט המפעיל גדול 2 אם האובייקט המופעל גדול 3 אם הם שוויםאז אני צריך להשאיר את זה לדעתי אני פשוט מחזיר הפנייה אבל אני לא יודע איך לסדר את זה...זה השיטה comparepublic int Compare(Shape s){ if (Area() >s.Area()) return 1; else if(Area() <s.Area())return -1; else return 0;}
פורסם 2014 במרץ 3111 שנים הבעיה היא שעשית return רק בתוך ה-for. הקומפיילר דורש שבכל מסלול אפשרי של ביצוע של הפונקציה, הוא יגיע ל-return. לקומפיילר אין דרך לדעת מראש אם התנאי שב-for יתקיים או לא, ולכן הוא לא יכול להיות בטוח ב-100% שתגיע ל-return הזה.(בכלל, לא ברור לי מה הצורך ב-for החיצוני)חוץ מזה, שני טיפים כלליים:א. תדאד להזחות מסודרות של הקוד.ב. תמיד תמיד תמיד אחרי if ו-else שמים סוגריים מסולסלים, גם אם זו רק פקודה אחת. זה הופך את הקוד להרבה יותר קריא.ג. יש לך קריאות מיותרות ל-compare - אתה קורא לה פעמיים בכל איטרציה במקום רק פעם אחת. תשתמש במשתנים.ד. להבא, אל תאמר לנו רק "יש שגיאה". תאמר מה השגיאה בדיוק. נערך 2014 במרץ 3111 שנים על-ידי שניצל
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.