|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
Ошибка в строке: mergeSort(p,q);22.06.2009, 15:45. Показов 1298. Ответов 8
Метки нет (Все метки)
Ошибка в программе сортировки слиянием.
При запуске появляется очень много строчек с сообщением at Gr.mergeSort(Gr.java:38). Я приведу часть кода (38 строчку я отметила) public static int q; public static void mergeSort(int p,int r){ if(p<r) { q=(q+r)/2; 38: mergeSort(p,q); mergeSort(q+1,r); merge(p,q,r); } } Дальше метод merge описан. Вообще саму программу я переделывала из C-шной, которая работала. Наверное, я как всегда торможу, но программу мне надо доделать срочно, а ошибку не найти
0
|
|
| 22.06.2009, 15:45 | |
|
Ответы с готовыми решениями:
8
проверте где ошибка в mergeSort MergeSort MergeSort |
|
0 / 0 / 0
Регистрация: 05.04.2009
Сообщений: 78
|
|
| 22.06.2009, 16:15 | |
|
мне кажется что проблема возникает при обратном ходе рекурсии из за того что ты объявила q как static, не надо его статичной делать, сделай нормальный объект своего класса и вызови метод сортировки.
0
|
|
|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
| 22.06.2009, 16:21 [ТС] | |
|
Если q делать не staticом то при компиляции выдается ошибка:
E:JavaGr.java:37: non-static variable q cannot be referenced from a static context q=(q+r)/2; ^
0
|
|
|
noir
|
|
| 22.06.2009, 17:06 | |
|
Так надо и метод тогда не статическим делать, только дело имхо, не в этом...
А какая именно ошибка выдается? |
|
|
0 / 0 / 0
Регистрация: 05.04.2009
Сообщений: 78
|
|
| 22.06.2009, 17:07 | |
|
у mergeSort тоже статик убрала?
кинь полный текст проги
0
|
|
|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
| 22.06.2009, 17:14 [ТС] | |
|
Текст проги:
import java.util.*; class St { public static int top; public static int as[] = new int[100]; public int x; void St(int ax){ x=ax; } void push(int x){ top++; as[top]=x; } int pop(){ top--; return as[top+1]; } int next_to_top(){ return as[top-1]; } } class Gr { public static int i,j,k; public static int n; public static int x[] = new int[200]; public static int y[] = new int[200]; public static int ind; public static int miny; public static int A[] = new int[200];//вспомогательный массив public static int B[] = new int[200];//здесь будут лежать номера точек, упорядоченные по полярному углу относительно точки ind public static St s = new St(); public static int q; public static void mergeSort(int p,int r){ if(p<r) { q=(q+r)/2; mergeSort(p,q); mergeSort(q+1,r); merge(p,q,r); } } public static void merge(int p, int q, int r) { i=p; j=q+1; k=p; do { int G=((x[A[i]]-x[ind]+1)*(y[A[j]]-y[ind]) - (y[A[i]]-y[ind])*(x[A[j]]-x[ind]+1)) *(- y[A[i]]+y[ind]); if (G<0){ B[k]=A[i]; k++; i++; } if(G==0) { if(((x[A[i]]-x[ind]+1)*(y[A[j]]-y[ind]) - (y[A[i]]-y[ind])*(x[A[j]]-x[ind]+1))==0) { if(y[A[i]]>y[A[j]]) { B[k]=A[i]; k++; i++; } else { B[k]=A[j]; k++; j++; } } else { if(( - y[A[i]]+y[ind])==0){ B[k]=A[i]; k++; i++; } } } if(G>0){ B[k]=A[j]; k++; j++; } } while((i<=q)&&(j<=r)); int temp=j; if(i>q){ for(int t=k; t<=r;t++){ B[t]=A[temp]; temp++; } } temp=i; if(j>r){ for(int t=k; t<=r;t++){ B[t]=A[temp]; temp++; } } for(int h=p;h<=r;h++){ A[h]=B[h]; } } public static void main(String[] args){ int i,j; n = Integer.parseInt(args[0]); for(i=0;i<n;i++){ x[i] = Integer.parseInt(args[2*i+1]); y[i] = Integer.parseInt(args[2*i+2]); } s.top=-1; ind=0; // индекс точки с наименьшей ординатой miny=y[0]; // значение у-ковой координаты этой точки for(i=1;i<n;i++){ // в этом цикле находим точку с наименьшей ординатой // (если таких несколько - выбираем самую левую) if(y[i]==miny){ if(x[i]<x[ind]){ miny=y[i]; ind=i; } } else { if(y[i]<miny){ miny=y[i]; ind=i; } } } for(i=0;i<n;i++) { A[i]=i; } mergeSort(0,n-1); // Gr a = new Gr(); // a.mergeSort(0,n-1); for(i=0;i<n;i++) { System.out.println(B[i]); } } } Сорри, там слегка лишнее есть, наверное - мне сортировка для выпуклой оболочки нужна. ВообщемЮ если скажете, что исправить, буду очень благодарна
0
|
|
|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
| 22.06.2009, 17:19 [ТС] | |
|
По-поводу static-а.
Наверное, я как всегда чего-то не понимаю. Если убрать его у q, то надо и у MergeSortа. Тогда приходится убирать его у n (количество чисел для сортировки), а у n он не убирается (как я понимаю из-за того, что n вводиться с клавиатуры). Вот.
0
|
|
|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
| 22.06.2009, 18:11 [ТС] | |
|
Хм, одну ошибку я нашла: в mergeSort-е
q=(p+r)/2; Только все равно прога неправильно работает. Например при вводе 3 3 3 3 1 1 1 выдает 1 2 0. А должна бы 2 1 0.
0
|
|
|
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
|
|
| 22.06.2009, 18:18 [ТС] | |
|
Все, ребята, все ошибки найдены, все заработало. Спасибо большое всем.
0
|
|
| 22.06.2009, 18:18 | |
|
Помогаю со студенческими работами здесь
9
Сортировка MergeSort Рекурсия в mergeSort
Не работает сортировка (MergeSort) Mergesort, значение -842150451 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|