עבור לתוכן

שאלה מציאת מערך דו מימדי ריבועי חלקי בjava

Featured Replies

פורסם

אלכסון ראשי של מערך דו-ממדי b ריבועי בגודל nXn מכיל את האיברים b[0,0],b[1,1],...,b[n-1,n-1]).

הוסיפו למחלקה Matrix שיטה בשם square. השיטה תבדוק האם קיים מערך דו-ממדי ריבועי חלקי בפינה הימנית התחתונה של המערך המאוחסן במחלקה Matrix אשר מכיל 1 -ים באלכסונו הראשי והיתר אפסים.

אם קיים - השיטה תחזיר את מספר השורות/עמודות של מערך ריבועי חלקי זה; אם לא קיים - השיטה תחזיר 0.

חתימת השיטה תהיה: public int square()

20413179cr3.jpg

חשבתי על משהו כזה

public int square()
{
int n = getNumberOfRows();
int i = n-1;
int j = n-1;
for (; i >= 0; i--)
for (;j >=0; j--)
{
if ((_data[i][i] == 1) && (_data[i-1][i] == 0) && (_data[i][i-1] == 0))
{
return n-1;
}
else
n--;

}
return 0;
}

אודה לעזרה ???

פורסם
  • מחבר

אבל יש אפשרות אחרת יותר פשוטה כפי שעשית אבל זה לא עובד :kopfpatsch:

פורסם

לגבי הקוד שלך יש איתו כמה בעיות:

- קודם כל לא הבנתי למה משמשת הלולאה הפנימית, אתה לא משתמש בכלל ב j.

- בתנאי אתה בודק רק את התא שבאלכסון + תא אחד סמוך באותה שורה + תא סמוך בטור. אבל מה אם שאר התאים באותה שורה/אותו טור?

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

- עוד בעיה היא שבתנאי אתה בודק את התא שבאלכסון, את התא שמשמאלה ואת התא שמעליו, אבל עבור כל שורה/טור אתה אמור לבדוק מהנקודה שבה אתה נמצא ועד לקצה (זאת אמרת מתחת לתא ומימין לתא עד לקצה המערך).

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

- דבר נוסף לגבי הערך שאתה מחזיר: אתה אמור להתחיל את ספירת השורות/טורים מ-0 ולא אחורה מ n. לדוגמה, עבור הריבוע השני בדוגמה שצירפת אתה אמור להחזיר 2 ולא 5-2 (או משהו בסגנון).

תנסה את מה ש UnsignedInteger הציע בדיון השני. אם אתה לא רוצה אתה לא חייב לחלק את הקוד למתודות (למרות שזה עדיף), אתה יכול לעבוד עם לולאות מקוננות.

פורסם

אתה יכול ליצור את זה בעזרת 3 פונקציות -

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

+2 פונקציות אשר אחת מהן בודקת האם יש שורת אפסים(החל מתא כלשהו), והשניה בודקת עמודת אפסים(עבור עמודה מסויימת, החל משורה כלשהי).

תתחיל לבדוק מלמטה בצד ימין ותעלה למעלה ושמאלה כל איטרציה(בלולאה הגדולה). עבור כל איטרציה אתה צריך לבדוק האם יש בתא 1 וגם יש עמודה וגם יש שורה.

שלחתי לך הודעה פרטית עם דרך לפתרון

אבל רק שתדע שהפתרון שהציע unsigned הרבה יותר טוב , כי יש איזה באג בפתרון שלי ..... ולא היה לי כח לתקן אותו .

פורסם

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

2) אתה לא בודק את כל התאים באותה שורה ועמודה נוכחית, אלא את התא הנוכחי באלכסון ו2 שכנים שלו(משמאלו ומעליו). במקום זה, אתה צריך לבדוק את כל אלה שמתחתיו ואת כל אלה שמימינו.

3) אתה לא צריך לעבור על כל התאים במטריצה, אלא רק על חלק מהם. אתה צריך להתחיל מהפינה הימינית התחתונה ולעלות למעלה ושמאלה כל איטרציה. בכל איטרציה אתה צריך לבדוק את מה שרשמתי לך בסעיף 2.

ארכיון

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

דיונים חדשים