פורסם 2012 במאי 813 שנים ישנה אפשרות להוסיף מעט "אלגנטיות" לפתרוןבמקום לשאול אם תא יושב בקצוות, לשאול "מסביב" (שמונה תאים שכנים) לכל התאים ופשוט לשאול האם האינדקס של השכן עובר את גבולות המטריצהמשהו כזהpublic class Test{ public static final int ROW_SIZE = 10; public static final int COL_SIZE = 10; public static void main (String[] args) { int[][] arr = new int[COL_SIZE][ROW_SIZE]; for (int i_col = 0 ; i_col < COL_SIZE ; i_col++) { for (int i_row = 0 ; i_row < ROW_SIZE ; i_row++) { // x__ // _*_ // ___ int i_neighbor_col = i_col-1; int i_neighbor_row = i_row-1; if (validCell(i_neighbor_col, i_neighbor_row)) { // process arr[i_neighbor_col][i_neighbor_row] } // _x_ // _*_ // ___ i_neighbor_col = i_col-1; i_neighbor_row = i_row; if (validCell(i_neighbor_col, i_neighbor_row)) { // process arr[i_neighbor_col][i_neighbor_row] } // ... } } } public static boolean validCell (int i_col, int i_row) { return i_col >= 0 && i_row >= 0 && i_col < COL_SIZE && i_row < ROW_SIZE; }
פורסם 2012 במאי 913 שנים מחבר אז בדיוק אותו דבר במערך דו מימדי רק שיש שכנים בקואורדינטת ה-i ושכנים בקואורדינטת ה-j.לתא במיקום [j] יש שכנים במקום ה-[i-1][j], [j-1], [i+1][j+1] וכולי... חוץ מאשר בקצוות כאשר i ו-j שווים לתחילת המערך או לסופו.לא כ"כ הבנתי את ההסבר ואני יושב על זה עכשיו וחייב להגיש את התרגיל עד 12 בלילה.מה שיש לי זה מערך דו מימדי ואני צריך להחזיר מערך חדש כאשר כל תא הוא הממוצע שלו עם כל התאים השכנים.
פורסם 2012 במאי 1013 שנים מחבר אוקיי יש לי הארכה וכמעט וסיימתי אבל יש לי בעיה קטנה שאני לא מוצא, בסופו של דבר השתמשתי בשיטה הרגילה של הרבה ifחילקתי את זה ל-3:כאשר אני נמצא בשורה הראשונה של המערך שליכאשר אני נמצא בכל השורות האמצעיותכאשר אני נמצא בשורה האחרונה_array - זהו המערך הדו מימדי שלי שעליו אני אמור לחשב את כל החישובים של התאיםint[][] arr = new int[_array.length][_array.length]; - המערך החדש שאני אמור להחזיר.בקוד שלי עדיין לא התייחסתי למצב שבו אני נמצא בשורה האחרונה של המערך. public myArray imageFilterAverage() { int[][] arr = new int[_array.length][_array.length]; for (int i = 0; i < _array.length; i++) { for (int j = 0; j < _array[i].length; j++) { if (i == 0 && j == 0) { arr[i][j] = (_array[i][j] + _array[i + 1][j] + _array[i][j + 1] + _array[i + 1][j + 1]) / 4; } else if(i > 0 && i < _array.length) { arr[i][j] = (_array[i][j] + _array[i - 1][j] + _array[i + 1][j] + _array[i - 1][j + 1] + _array[i][j + 1] + _array[i + 1][j + 1]) / 6; } else if(j == 0 && i == _array.length) { arr[i][j] = (_array[i][j] + _array[i - 1][j] + _array[i][j + 1] + _array[i - 1][j + 1]) / 4; } else if (j > 0 && j < _array[i].length) { if (i == 0) { arr[i][j] = (_array[i][j] + _array[i][j - 1] + _array[i + 1][j - 1] + _array[i + 1][j] + _array[i][j + 1] + _array[i + 1][j + 1]) / 6; } else if (i == _array.length) { arr[i][j] = (_array[i][j] + _array[i - 1][j - 1] + _array[i][j - 1] + _array[i - 1][j] + _array[i - 1][j + 1] + _array[i][j + 1]) / 6; } else { arr[i][j] = (_array[i][j] + _array[i - 1][j - 1] + _array[i - 1][j] + _array[i - 1][j + 1] + _array[i - 1][j] + _array[i + 1][j] + _array[i - 1][j + 1] + _array[i ][j + 1] + _array[i + 1][j + 1]) / 8; } } } } return new myArray(arr); }המערך שלי שעליו אני עובד: int[][] arr = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8} };הבעיה שלי היא שגיאה שאני לא מצליח למצוא ב-if האחרון בקוד, אשמח אם מישהו יעיר את צומת ליבי לבעיה.
פורסם 2012 במאי 1013 שנים אאוץ', כואב לי לראות את הקוד שלך...מה רע במה ש-sharonbn הציע?למקרה שלא הבנת, זה מה שאתה אמור לעשות:for (... i ...) { for (... j ...) { arr[i][j] = calculate(i,j); }}double calculate(int row, int col){ double sum = 0; double count = 0; for (int i = row-1 ; i<= row+1; i++) { for (int j = col-1 ; j <= col+1 ; j++) { if (isvalid(i,j)) { sum += _array[i][j]; count++; } } } return sum / count;}והפונקציה isvalid צריכה להיות כמו ש-sharonbn הציע.
פורסם 2012 במאי 1013 שנים מחבר לא כ"כ הבנתי מה ש-sharonbn הציע אז ניסיתי משהו אחר.אתה אמרת לבדוק מקרים ספציפיים עם הרבה if ושאין דרך יותר מחוכמת לעשות את זה
פורסם 2012 במאי 1013 שנים גם את המקרים הספציפיים היה אפשר לעשות בצורה יותר חכמה, בלי שכפול קוד מטורף.לדוגמה, להשתמש בשני משתנים (sum ו-count) ואז באמצעות ifים להוסיף להם, יענו משהו בסגנון הזה:if (i>0) { if (j>0) { sum += _array[i-1][j-1]; count++; } if (j < length-1) { sum += _array[i-1][j+1]; count++; } sum += _array[i-1][j]; count++;}if (i < length-1) { // ... rest of the checks...}
פורסם 2012 במאי 1013 שנים מחבר אני מתכוון לבעיה אצלי בקודאני רוצה להבין מה הבעיה שם (java.lang.ArrayIndexOutOfBoundsException: 3)
פורסם 2012 במאי 1013 שנים בדיוק כמו השם של השגיאה - חרגת מגבולות המערך. אחת מהגישות שלך יוצאת מהגבול של המערך.חוץ מזה, אין שום היגיון ב-if-ים שלך ובסדר שלהם.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.