|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
24.12.2015, 11:53 | #1 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Массив, сумма элементов соприкасающихся углами с максимальным элементом. Java
Создать функцию, определяющую в целочисленном прямоугольном массиве matrixnm сумму всех элементов, соприкасающихся углами с его максимальным элементом. Написал под неё программу, но считает она не правильно. Помогите пожалуйста разобраться. Код:
int n, m, vector_min, vector_max, max, s; jTextArea1.setText(null); vector_min = Integer.parseInt(jTextField1.getText()); vector_max = Integer.parseInt(jTextField2.getText()); n = Integer.parseInt(jTextField3.getText()); m = Integer.parseInt(jTextField4.getText()); if (vector_min > vector_max) { JOptionPane.showMessageDialog(null, "максимальное должно быть больше минимального"); return; } int vector[][] = new int[n][m]; Random Rand = new Random(); jTextArea1.append("Массив:" + "\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { vector[i][j] = Rand.nextInt(vector_max - vector_min + 1) + vector_min; jTextArea1.append(Integer.toString(vector[i][j]) + " "); } jTextArea1.append("\n"); } int jmax = 0,imax = 0,i,j; max = vector_min; for (i = 1; i < n; i++) { for (j = 1; j < m; j++) { if (max < vector[i][j]) { max = vector[i][j]; imax = i; jmax = j; } } } s = 0; //int imax, jmax; for (i = imax - 1; i < imax + 1; i++){ for (j = jmax - 1; j < jmax + 1; j++){ if ((i > 0) && (i <= n) && (j > 0) && (j <= m) && !((i == imax) && (j == jmax))){ s = s + vector[i][j]; } } jTextArea1.append("max = " + Integer.toString(max)); jTextArea1.append("sum = " + Integer.toString(s) + "\n"); } |
24.12.2015, 11:53 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
По содержанию ваша тема имеет сходства с данными обсуждениями Какие языки были до Java? Точнее был же java или в точности java-подобный язык? Массив. Pascal или Java Дан одномерный целочисленный массив из N элементов Дан массив A(n,m). Найти количество элементов в каждой строке, меньшего диагонального |
24.12.2015, 12:30 | #3 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Он не правильно считает. Берет какие то совсем левые цифры и складывает. Или вообще ноль выводит. И по идее он должен брать в расчет если макс значений несколько. Но он постоянно выводит 2 строки с подсчетом. Жаль я не могу скриншот привести.
|
24.12.2015, 12:41 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
i < imax + 1; j < jmax + 1; неравенства следует брать НЕСТРОГИЕ, т.е <=. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.12.2015, 13:04 | #6 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Все равно считает не правильно.
Массив: 75 35 67 46 28 98 67 39 48 24 41 69 96 71 82 99 66 66 21 13 97 12 56 47 63 max = 96sum = 447 И иногда выскакивает ошибка: Код:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 at luch71.Luch71.jButton1ActionPerformed(Luch71.java:231) at luch71.Luch71.access$400(Luch71.java:16) at luch71.Luch71$5.actionPerformed(Luch71.java:84) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6525) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746) at java.awt.EventQueue.access$400(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.awt.EventQueue$3.run(EventQueue.java:691) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:719) at java.awt.EventQueue$4.run(EventQueue.java:717) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:716) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) |
24.12.2015, 13:12 | #9 (permalink) |
Member
Регистрация: 03.02.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Код:
int n, m, vector_min, vector_max, max, s; jTextArea1.setText(null); vector_min = Integer.parseInt(jTextField1.getText()); vector_max = Integer.parseInt(jTextField2.getText()); n = Integer.parseInt(jTextField3.getText()); m = Integer.parseInt(jTextField4.getText()); if (vector_min > vector_max) { JOptionPane.showMessageDialog(null, "максимальное должно быть больше минимального"); return; } int vector[][] = new int[n][m]; Random Rand = new Random(); jTextArea1.append("Массив:" + "\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { vector[i][j] = Rand.nextInt(vector_max - vector_min + 1) + vector_min; jTextArea1.append(Integer.toString(vector[i][j]) + " "); } jTextArea1.append("\n"); } int jmax = 0,imax = 0,i,j; max = vector_min; for (i = 1; i < n; i++) { for (j = 1; j < m; j++) { if (max < vector[i][j]) { max = vector[i][j]; imax = i; jmax = j; } } } s = 0; //int imax, jmax; for (i = imax - 1; i <= imax + 1; i++){ for (j = jmax - 1; j <= jmax + 1; j++){ if ((i > 0) && (i <= n) && (j > 0) && (j <= m) && !((i == imax) && (j == jmax))){ s = s + vector[i][j]; } } } jTextArea1.append("max = " + Integer.toString(max)); jTextArea1.append("sum = " + Integer.toString(s) + "\n"); |
24.12.2015, 14:20 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И сразу - вопрос:
Почему при поиске максимального элемента Вы индексируете массив с 1, в то время как при заполнении матрицы - с 0? Отсюда и ошибки при поиске максимума: во-первых, программа с считывает со второй строки и со второго столбца (отсюда пропущенные значения элементов), во-вторых, она не может найти строк и столбцов с максимальными индексами - отсюда эта простыня ошибок. Поясняю на примере: допустим, Вы задаете матрицу 5х5. Но при вводе значений Вы гоняете i и j от 0 до 4, а при поиске максимума - от 1 до 5. Приведите все части программы к единой индексации, и будет Вам счастье. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|