Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кто может помочь с проверкой кода ? я новичок и хочу узнать свои ошибки  
V
    Опции темы
Wyatt
Дата 18.6.2010, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Привет. Я новичок в java, изучаю самостоятельно, и мне не кому меня проверить, то что я пишу. Возможно здесь найдется опытный джавист с которым бы я смог редко советоваться ? я не буду доставать, мне только нужно чтобы вы только натолкнули меня на мои ошибки, это у вас не будет занимать больше 5 минут. Если никто не хочет за безвозмездно - то можно договорится о цене за которую вы можете уделить мне раз в месяц 5 - 10 минут. 
П.С. Если не туда написал, прошу перенести в нужную ветку . 
PM MAIL   Вверх
powerOn
Дата 18.6.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Если у тебя какие-то вопросы конкретные есть, то задавай, не стесняйся. Тут за помощь денег не берут. 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Wyatt
Дата 18.6.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Ну вот такой вопрос: 
Нужно перевернуть List

делаю двумя методами: 

вот первый 
Код

       Collections.reverse(list);


вот второй 
Код

        if (list.size() <= 1) {
            return;
        }
        List tmp = new ArrayList(list);
        for (int i = 0; i < list.size(); i++) {
            list.set(i, tmp.get(list.size() - i - 1));
        }


какой из них более предпочтительней или эфективней? 

Это сообщение отредактировал(а) Wyatt - 18.6.2010, 21:34
PM MAIL   Вверх
Skynin
Дата 18.6.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



По разным оценкам, от 40% до 60% труда программиста - это отладка кода. Поэтому искать в коде ошибки - это такая же обязанность как и писать сам код. Тем более когда он - собственный. Найдете сами ошибку - узнаете гораздо больше даже когда писали, не говоря о том что бы за Вас кто-то ее искал.
Наталкивать на ошибки можно когда неделю усердно искал и не нашел. А так - учитесь программировать = думать-писать-исправлять
И пользоваться интернетом и документацией - при поиске ошибок первейшее дело(потому что подобные уже кто-то совершал, и можно найти косвенный ответ). 


Цитата

Ну вот такой вопрос: 
Нужно перевернуть List

Меня, если честно поражает что молодое поколение не умеет пользоваться гуглом...
Это вопрос первого курса. надцать ответов в интернете. А часто в самих книгах сразу рассказано.

Загляните в исходный код Collections.reverse(list); да и все. Чего спрашивать то?
Не знаете как - погуглите на предмет как установить JDK под Eclipse/NetBeans чтобы показывал исходный код стандартной библиотеки.
Отвечено и на этом форуме не раз.

Если же интересует глобально, то прочтите Н. Вирт АЛГОРИТМЫ + СТРУКТУРЫ ДАННЫХ = ПРОГРАММЫ 
сами узнаете и сможете другим рассказывать.

Это сообщение отредактировал(а) Skynin - 18.6.2010, 21:40
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
dobrolub
Дата 18.6.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Интересный вопрос, я написал вот так, и считаю, что это самый эффективный способ, да и ты туда-же шёл со своим алгоритмом: 

Код

import java.util.*;

public class T  {
    public static void main(String []args) throws Exception {
        List<String> list = new ArrayList<String>();

        for (String arg: args)
            list.add(arg);

        System.out.println(list);

        reverse(list);

        System.out.println(list);
    }

     public static void reverse(List list) {
        int size = list.size();
        int mid = size >> 1;
        for (int i = 0; i < mid; i++) {
            Object e = list.get(i);
            list.set(i, list.get(size - i - 1));
            list.set(size - i - 1, e);
        }
    }
}




Это сообщение отредактировал(а) dobrolub - 18.6.2010, 22:58
PM   Вверх
Wyatt
Дата 19.6.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Цитата(dobrolub @ 18.6.2010,  22:45)
Интересный вопрос, я написал вот так, и считаю, что это самый эффективный способ, да и ты туда-же шёл со своим алгоритмом: 

Код

import java.util.*;

public class T  {
    public static void main(String []args) throws Exception {
        List<String> list = new ArrayList<String>();

        for (String arg: args)
            list.add(arg);

        System.out.println(list);

        reverse(list);

        System.out.println(list);
    }

     public static void reverse(List list) {
        int size = list.size();
        int mid = size >> 1;
        for (int i = 0; i < mid; i++) {
            Object e = list.get(i);
            list.set(i, list.get(size - i - 1));
            list.set(size - i - 1, e);
        }
    }
}

а можно еще вот так: 

Код

        int size = list.size();
        int mid = size >> 1;
        for (int i = 0, j = size - 1; i < mid; j--, i++) {
            list.set(i, list.set(j, list.get(i)));
        }

PM MAIL   Вверх
Skynin
Дата 19.6.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Цитата

а можно еще вот так: 

Так же Collections.reverse
Код

/*
 * @(#)Collections.java    1.106 06/04/21
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package java.util;
public class Collections

public static void reverse(List<?> list) {
        int size = list.size();
        if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
            for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)
                swap(list, i, j);
        } else {

где в swap
Код

list.set(i, list.set(j, list.get(i)));


Факты и заблуждения профессионального программирования
Роберт Гласс  почитать

Заблуждение 10 
       Людей можно научить программированию, показывая им, как писать программы. 

Обсуждение 
       Как вы учились программировать? Готов спорить, что это были какие-то занятия в учебном классе, на которых преподаватель рассказывал о правилах языка программирования, после чего предоставлял слушателям писать некий программный код, как им заблагорассудится, А если вы учились программировать более чем на одном языке, то наверняка во всех случаях это было одно и то же. Вы читали о языке программирования, или вам рассказывали о нем, а потом предоставляли полную свободу писать на этом языке все что угодно. 
       И такой способ обучения программированию настолько вошел в норму, что вы, может быть, и не видите в нем ничего плохого, И напрасно. Он отнимает массу времени. 
       Дело вот в чем: изучая любой язык, мы в первую очередь учимся читать. Вы берете "Войну и мир", или "Дика и Джейн", или какое-то другое произведение и читаете. И вы не думаете, что можно написать "Дика и Джейн" или "Войну и мир", не изучив как можно больше примеров творчества умелых писателей. (Поверьте мне, написание "Дика и Джейн" тоже требует мастерства! Надо писать словами, входящими в словарь, соответствующий возрасту и знаниям читателей.) 

P.S.
В предложенной книге Вирта и рассказывается об алгоритмах, и почему один эффективней другого.
Можно доходить до этого самому, а можно прочитать, понять, и научиться - анализировать. Не обязательно с строгой математикой, а эмпирически.

Но можно конечно и гадать, и задавать вопросы на форуме, вместо элементарного:
Заполните список на 100 000 элементов, и реверсируйте с замером времени.
Правда опять придется почитать - как правильно писать такие тесты, как учитывать "разогрев" и оптимизации JVM

Учитесь учиться

Это сообщение отредактировал(а) Skynin - 19.6.2010, 18:58
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
sergioK
Дата 22.6.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



[QUOTE=Skynin,19.6.2010,  18:48]
Цитата

Код

    for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)

это никому ни нужные понты  smile 
начинающего они только путают 
просто mid=siz/2 нельзя ??? 




Это сообщение отредактировал(а) sergioK - 22.6.2010, 17:16
PM MAIL   Вверх
Skynin
Дата 22.6.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



это никому ни нужные понты -> Copyright 2006 Sun Microsystems

Цитата

начинающего они только путают 

Не подумал, просто скопипастил. 
Действительно чего только начинающего не путает на свете....
Может пусть тогда и не начинает, если не знает о связи сдвига битов и операций умножения/деления на 2?
Может начинающий еще и не знает вообще о битах и байтах, а я тут понимаешь жизнь ему уже поломал архисложным кодом.
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
sergioK
Дата 22.6.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Skynin @ 22.6.2010,  17:34)
это никому ни нужные понты -> Copyright 2006 Sun Microsystems

Цитата

начинающего они только путают 

Не подумал, просто скопипастил. 
Действительно чего только начинающего не путает на свете....
Может пусть тогда и не начинает, если не знает о связи сдвига битов и операций умножения/деления на 2?
Может начинающий еще и не знает вообще о битах и байтах, а я тут понимаешь жизнь ему уже поломал архисложным кодом.

А сколько раз за последний год вам приходилось этим реально пользоваться , ?
т,е так что обычное деление на два не проходило , 







Это сообщение отредактировал(а) sergioK - 22.6.2010, 18:21
PM MAIL   Вверх
Skynin
Дата 22.6.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Цитата

А сколько раз за последний год вам приходилось этим реально пользоваться

Ну, трудно посчитать, не задумывался, раз 20 наверное.
У меня просто сишное воспитание, я на автомате ставлю сдвиг вместо умножения/деления.

Но насчет жалости к начинающим, то просто не люблю этих нюней. Если начинающий не сможет догадаться что это такое деление на 2, то что же он будет с "великими тайнами" singlton'а потом делать?
Оно конечно, в мое время в институт поступать ездили сами в другой город, а сейчас мама даже документы сама несет в приемную в том же городе, бо дитятко в стрессе будет, и не поймет, куды нести.

То есть меня можно только забанить, а никак такими вещами не посовестить или разжалобить.
Тем более когда у меня никакого злого умысла не было, и не считаю начинающего программиста за полного кретина, которому еще и инкремент с декрементом разворачивать нужно, потому что оно бедненькое не осилило книжку толстую по синтаксису языка.

Вы похоже да, считаете что начинающий программист это как раз такой.
дело хозяйское.
 smile

Это сообщение отредактировал(а) Skynin - 22.6.2010, 18:46
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Temdegon
Дата 28.6.2010, 13:29 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Че-то у сана стандарты форматирования гуляют.
Прям в одном файле то выделяют "=" пробелами, то нет.  smile 
Код

            for (int candidate = maxCandidate; candidate >= 0; candidate--) {
                for (int i=0, j=candidate; i<targetSize; i++, j++)


Очень стало интересно, ощутима ли разница между 
mid=size>>1 и mid=siz/2 ? 
Никогда не понимал, зачем так писать. Т.е. понятно, что быстрее, но.... Может тогда вручную циклы будем разворачивать, прекалькуляцию выражений делать и т.п.?
Цитата

У меня просто сишное воспитание, я на автомате ставлю сдвиг вместо умножения/деления.

Звучит пугающе... В данном случае оно выглядит нормально и понятно. Но представить себе три вложенных цикла, с парой ифов и несколькими формулами внутри, истыканных этими >> << мне страшно. Я б грязно выругался, увидев такое =)
Не лучше ли использовать нормальные компиляторы и задавать им опции оптимизации, чтоб они не только /2 заменили на более быстрые операции, но и делали еще сотни других кошерных оптимизаций? ИМХО gcc с этим отлично справляется.
В случае с джава - вроде давно уже придумали обфускаторы, которые оптимизируют код.
Сорри за грязный оффтоп и срач smile 
PM MAIL   Вверх
powerOn
Дата 28.6.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Temdegon @  28.6.2010,  14:29 Найти цитируемый пост)
Очень стало интересно, ощутима ли разница между 
mid=size>>1 и mid=siz/2 ? 
Никогда не понимал, зачем так писать. Т.е. понятно, что быстрее, но.... Может тогда вручную циклы будем разворачивать, прекалькуляцию выражений делать и т.п.?

Я в одной книжке прочитал вот такое интересное изречение, относительно не следования простым стандартам кодирования:
Цитата
Writing code that others can’t work with doesn’t make you smarter; it makes you a less valuable resource.

Поскольку на  его чтение и понимание уходит значительно больше времени.




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.