Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 9

Вызов методов с параметрами и возвращение результатов выполнения

02.10.2013, 07:27. Показов 4726. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Сейчас делаю тестовое задание на Junior Java Programmer и в целом мне понятно как реализовать его. Но я хочу что бы код был красиво написан, а не быдло код. У меня вопрос: как реализовать метод, что бы он мог вернуть 6 ArrayList'ов? И как передать эти ArrayList'ы другому методу при том что этот метод, опционален, то есть человек может кликнуть по кнопке Экспорт в базу данных, а может и не кликнуть. Где можно сохранить полученные значения от класса sendMoneyPoints, так что бы потом при необходимости записать в базу данных?

Задание заключается в написании программы парсера данных с сайта, сразу скажу сервиса для отдачи данных в XML там нету. GUI программа с возможностью поиска по городам и с возможностью сохранения результатов в sqlite db и csv файле.

Почему 6 ArrayList'ов? Программа с сайта получает ~1200 значений которые относятся к 6 категориям. Конечно можно передавать одним массивом и на месте парсить, но это совсем тупо. Так как придется парсить и для вставки в JTable и записи в файл/базу данных. То есть в 3х экшлистенерах. Вообще всю логику можно реализовать в MainGUI классе, но это не вариант.

Метод парсинга
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void sendMoneyPoints() throws IOException {
        Document doc = Jsoup.connect(URL_SEND_MONEY).get();
        Elements links = doc.select("td");
        int i=0;
        
        //Этот участок кода не знаю чем заменить, так как без инициализации не работает while
 
        Iterator<Element> agent=links.listIterator(i);
        Iterator<Element> address=links.listIterator(i);
        Iterator<Element> phone=links.listIterator(i);
        Iterator<Element> currency=links.listIterator(i);
        Iterator<Element> commission=links.listIterator(i);
        Iterator<Element> info=links.listIterator(i);
 
    
        while(agent.hasNext() && address.hasNext() && phone.hasNext() && currency.hasNext() && commission.hasNext() && info.hasNext()){
 
            agent=links.listIterator(i++);
            address=links.listIterator(i++);
            phone=links.listIterator(i++);
            currency=links.listIterator(i++);
            commission=links.listIterator(i++);
            info=links.listIterator(i++);
 
            agents.add(agent.next().text());
            addresses.add(address.next().text());
            phones.add(phone.next().text());
            currencies.add(currency.next().text());
            commissions.add(commission.next().text());
            infos.add(info.next().text());
        }
 
    }


Метод записи в DataBase
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 public void InsertInto(List<String> agents, List<String> addresses, List<String> phones, List<String> currencies, List<String> commissions, List<String> infos, String countryId, String city) throws ClassNotFoundException, SQLException {
 
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getConnection("jdbc:sqlite:"+countryId+"."+city+".db");
        c.setAutoCommit(false);
        System.out.println("Opened database successfully");
        stmt = c.createStatement();
        for(int i=0; i<agents.size(); i++){
            String query = "insert into 'POINTS' ('id','agent','address','phone','currency','commission','info') " +
                    "values ('"+i+"','"+agents.get(i)+"','"+addresses.get(i)+"','"+phones.get(i)+"','"+currencies.get(i)+"','"+commissions.get(i)+"','"+infos.get(i)+"'); ";
            stmt.executeUpdate(query);
        }
        stmt.close();
        c.commit();
        c.close();
    }


Итого у меня 5 методов, я реализовал и через отдельные классы и через методы в одном классе. Но что бы получить данные из методов мне приходится писать костыли реальные и получается некий быдло-код. Буду благодарен за любые исправления и идеи. Так, как хорошего стиля программирования я не видел, а надо за три дня сделать конфетку.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2013, 07:27
Ответы с готовыми решениями:

возвращение 2 результатов
function include_content($theme) { $file_con = '/content/'.$theme.'/контент.txt'; $title = title($theme); if...

Вызов методов классов друг у друга (вызов метода из другого класса)
Есть несколько классов, которые могут вызывать методы (функции) друг у друга. Логика: класс1 имеет метод А, класс2 имеет метод Б, класс1...

Возвращение результатов функции в несколько переменных
Здраствуйте, можно ли как-то припомощи оператора return вернуть несколько значений? Если да, то как после вызова функции вернуть первой...

22
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 9
03.10.2013, 03:12  [ТС]
Студворк — интернет-сервис помощи студентам
tankomaz, прошу прощения.

GetMoneyPoints.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
....
private List<String> someArray = new ArrayList<String>();
 
    public List<String> getSomeArray() {
        return someArray;
    }
 
    public void setSomeArray(List<String> someArray) {
        this.someArray = someArray;
 
    }...


Main.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
GetMoneyPoints get = new GetMoneyPoints();
        get.parse();
        String a = get.getSomeArray().get(1);
        System.out.println(a);

В общем проблема через get'тер я получаю не массив, а строку. А мне нужно все сделать через индексы. Может я и ошибаюсь, но когда я пытаюсь получить через get.getSomeArray().get(1) я получаю не второй элемент массива, а весь массив в println

Добавлено через 7 минут
Не понятно, с одной стороны возвращает все элементы вместо одного, с другой не ругается на .get(1); Даже не знаю что думать.
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
03.10.2013, 11:02
Одно из двух
или у вас код заносит в ArrayList в каждый элемент сразу все данные в виде строки из-за не правильного парса.

Или вы нашли уникальную багу жавы

возможны конечно и другие варианты , но мне этот кажется самым реалистичным.
Можете привести код где у вас лист заполняется ?
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
03.10.2013, 11:11
Похоже на толстый троллинг.
Или же самое время ТСу отложить собеседование и прочитать хотя бы одну книгу по Java и ОПП.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2013, 11:11
Помогаю со студенческими работами здесь

Возвращение результатов на запрос MySQL в переменную
Кто нибудь знает, как из получившегося результата по запросу... ('Select equipment from equipment WHERE adress like...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только...

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

Работа с параметрами методов
Скажите пожалуйста, почему программа ничего не выдаёт? Пустой экран в консоли. Программа по оличению простых чисел от непростых using...

Возвращение цикла do после выполнения while - dev C++
Здравствуйте! Нужен код, чтобы возвращал цикл do после выполнения while Помогите пожалуйста! Заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru