![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| NEt_Hunter |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Код сортировки чисел выдает ошибку, прошу помочь найти ошибку. Java тока начал изучать.
|
|||
|
||||
| drHip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 30.5.2007 Репутация: нет Всего: нет |
это самый простой и самый медленный пузырек
|
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
NEt_Hunter,
1) код нужно писать в теге code, будет удобней читать. 2) ошибка у тебя на этой строке:
потому что условие цикла у тебя j < 5 и когда j становится 4, то j+1 равняется 5, а максимальный индекс массива 4. Вот и вылетает ошибка выхода за пределы массива. 3) лучше не используй метки, это не есть хорошо. -------------------- Lost.... |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Метод пузырька
Добавлено через 54 секунды Ого уже ответов сколько )) |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Что ж вы все пузырьки кидаете
-------------------- Lost.... |
|||
|
||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Почему выдаёт ошибку -- уже объяснили. Для исправления нужно внутренний цикл сделать до 4, а не до 5. Есть ещё одна ошибка, логическая: в случае, если элементы не отсортированы, ты просто присваиваешь следующий элемент предыдущему. Его значение при этом теряется. Твой метод будет "размножать" некоторые числа и стирать другие. Поэтому, надо сделать обмен через временную переменную. Например вместо
вот так
Кроме того, есть синтаксическая погрешность: в твоём случае не нужен break <метка>. Если ты хочешь выйти только из внутреннего цикла. Но именно это делает простой break без метки. Поэтому, можно убрать метку. Наконец, я не совсем понимаю алгоритм. Твой алгоритм, по сути, делает только 5 перестановок. Хватит ли их для сортировки? Мне кажется, нет. И это точно не метод пузырька. По методу пузырька не надо делать break, надо во всех случаях идти дальше, но не до самого конца, на каждый раз на единицу меньше. |
||||
|
|||||
| jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
||||
|
||||
| NEt_Hunter |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Спасибо большое всем за советы!
Я не пользовался пузырьковым методом в этом примере. Просто сортировка. Знаком сним уже с С++ Должно хватить, ведь чисел 5 и перестановок 5. Для n-го количества можно ведь использовать num.length С бейзиком вообще не знаком. Знаю, можно. Я ведь говорил, что тока учусь, пробую всевозможные варианты, тем самым закрепляю уроки с метками. Это почему? Вдруг мне придется выйти с внешнего цикла или попасть в определенную строку кода проги? |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Ну вот представь. Вот понаставлял ты таких меток. А потом кто-нибудь другой (или ты сам через некоторое время) попытается разобраться в твоем коде. Это хорошо когда просто алгоритм. А если код будет побольше и несколько меток? Запутаться можно элементарно. Такие проги умные люди сравнивают с макаронами )) (вроде так). Метки нужно использовать только в крайних случаях, когда они реально упростят жизнь. -------------------- Lost.... |
|||
|
||||
| serger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Метки желательно использовать только если ... я даже не могу придумать когда, тк сам ниразу не использовал и даже не думал о этом.. Почитай какую нить умную книжку, там найдёшь подробный ответ на этот вопрос. И приводятся правильные примеры, где метки нужны. Хотя для прерывания циклов обычно используется сразу return. И старайся избегать длинных методов. Каждый метод должен делать что-то элементарное и одно. И не изучай Java на реализации алгоритмов. Не к чему это. Основные алгоритмы реализованы. Не зачем городить велосипед, поэтому врятли это реально понадобиться. Лучше изучай ООП, UML, шаблоны, учись правильно строить приложения. Это реально необходимо и важно. -------------------- упс! |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Я думаю, что перестановок надо больше пяти. Смотри 0) 54321 1) 45321 2) 43521 3) 34521 4) 34251 5) 32451 Видишь? Ещё не отсортировалось. Считается, что использовать метки в Java -- "дурной тон". Иначе говоря, если тебе приходится использовать метки, то ты мыслишь не по-джавному, а применяешь навыки из других языков программирования. В Java это вообще невозможно. Ты не можешь попасть в любую строчку программы, пометив её меткой, так как оператора goto нет. Ты можешь пометить блок меткой и потом с помощью break <метка> перейти на КОНЕЦ этого блока (но не на метку!). Ты можешь пометить ЦИКЛ меткой и с помощью continue <метка> перейти на начало цикла. Но это обязательно должен быть цикл, просто так в любое место не перейдёшь. Разработчики Java специально устранили "лишние" возможности, чтобы легче было программировать. Меньше возможностей, меньше вариантов, меньше ошибок, проще думать. Очень многие вещи, которые есть в Си++ или Бейсике отсутствуют в Java именно по этой причине. |
|||
|
||||
| NEt_Hunter |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Получается! 1) 45321 43521 43251 43215 2) 34215 32415 32145 32145 3) 23145 21345 21345 21345 4) 12345 Всего за 4 внешних цикла решено! Да, переход в любое место грубо сказал. Цикл, конечно, имел ввиду. Это сообщение отредактировал(а) NEt_Hunter - 11.11.2007, 23:15 |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
У тебя (по первому тексту) внутренний цикл идёт до первой перестановки и потом прерывается. Поэтому, на каждый внешний цикл будет выполняться только одна перестановка.
|
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Ну, вообще-то, это не причина не использовать метки. То, что это "считается дурным тоном" и "мыслишь не по-джавному" - это не причины, а лишь объяснения. Причину же объяснили немного ранее - код получается менее очевидным. Даже одной метки хватит, чтобы запутать читающего. Всего лишь требуется, чтобы при листании бряк и его метка оказались на разных страницах. Кстати, с/с++ точно так же не одобряет метки. Интересно, и почему это не пузырёк? Очень даже пузырёк. Классический. Только реализован не до конца, как уже говорили. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: нет Всего: 4 |
Про операторы перехода очень много говорили люди намного у мнее нас с вами. Лично я прислушиваюсь к авторитетному мнению и считаю, что такую логику можно ипсользовать ТОЛЬКО в исключительных случаях.
NEt_Hunter, Имей в виду, что в Java очень редко применяется сортировка руками. Классам можно определить метод compareTo для сравнения 2-х объектов и использовать встроенные методы сортировок. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |