Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img

Доброго времени бытья дорогие друзья, я уже с июля пытаюсь вкатиться в IT. Ну соответственно вопрос одноименный с заголовком сабжа, недавно до меня дошло что начиная со среды разработки до языка программирование, в том число и библиотеки со фреймворками == инструменты, а решение тех иных задач предположим обычного "Hello world" до "Сложной программы" это опыт, усилие и труд людей.
Потому я всегда после некоторых теоретических знаний я иду искать себе практику который мог бы менять научить решать задачи, привыкать к бизнес логике и в общем работать на благо компаний, соответственно задачи не однотипные допустим я недавно при помощи туториала создал обычное CRUD приложение, поработал с телом запроса. Ну и решил, раз уж я пришел к этому то попробую теперь решить тех задание из свободного доступа, нашел одну задачу вкратце нужно решить (задачка ), и что думаете? При первой же попытке прочитать JSON с файла а не из тело запроса посыпались огромные трудности, я лез в stackoverflow, в документацию gson(библиотека для работы с Json) и даже в саму джаву, ну естественно столько инфы расплавило мне мозги и получилось объект с именем tickets с двумя параметрами null, решив что утро вечером мудреннее я оставил на следующий день, а сегодня открыв IDEA мне захотелось плакать и ныть, и сейчас в тильте пишу такой текст.

Теперь вопрос, где и как искать инфу? Как правильно гуглить? Что и где читать? Как научиться читать документацию?(B2 english с переводчиком справляюсь на ура)? Как научиться решать поставленные задачи?

Ну и соответственно если вы хотите сказать что-то типо: Не парься братишка, всё придёт с опытом, то прошу вас хотя бы помочь мне ускорить найти ответы.

P.S программирую на Java.


P.S.S Смотрел видосики по типу, Java на практике, челик пишет код я вижу и всё понимаю теоритический но практический ничего не остается, как научиться не только думать но и действовать?

P.S.S.S

Алгоритмы ютуба просто огонь, закинуло в реки

YoshkinKot

Пользователь

Регистрация: 20.06.2016

Сообщения: 16243

Рейтинг: 6391

YoshkinKot

Регистрация: 20.06.2016

Сообщения: 16243

Рейтинг: 6391

Как научиться решать поставленные задачи?


> Разбиваешь на подзадачи. Желаешь сделать всё как можно проще. Если всё равно не то, бей на еще мельче вещи.


Как научиться читать документацию?


> Ищешь quick start, читаешь, пробуешь. По мере использования и возникновения вопросов идешь читать что делает тот или иной класс/метод.


Как правильно гуглить?


> Обычно запросы что-то уровня такого

java “gson” how to read json from file


Есть обязательные части вроде “gson”, потом короткий вопрос, который тебе нужен.


Пользуешься не только гуглом, но и яндексом, бингом и прочими. Порой один лучше другого реагирует. Используй параметры поиска, по сайту, по формату файла и т.д.

AtagaN

Пользователь

Регистрация: 04.11.2016

Сообщения: 1151

Рейтинг: 320

AtagaN

Регистрация: 04.11.2016

Сообщения: 1151

Рейтинг: 320

Цитата:

При первой же попытке прочитать JSON с файла а не из тело запроса посыпались огромные трудности

Нажмите, чтобы раскрыть...

Советую конкретнее формулировать вопрос. В чем проблема?

Прочитать файл?

Парсить его?

Я так понимаю ты ищешь готовые решения и пытаешься их натянуть на свою задачу. Так не пойдет.



haHAA

Пользователь

Регистрация: 25.03.2017

Сообщения: 1205

Рейтинг: 777

haHAA

Регистрация: 25.03.2017

Сообщения: 1205

Рейтинг: 777

img
YoshkinKot сказал(а):

> Обычно запросы что-то уровня такого

java “gson” how to read json from file

Нажмите, чтобы раскрыть...

Я всегда гуглю без использования всяких вспомогательных how,why,what


"java gson read json"

"read json java"

"java json to map"


Последний запрос я бы посоветовал вбить, т.к. приходилось поработать с джейсоном в питоне - там можно json превратить в словарь/dict/map и спокойно работать с ним


Например, json

{


"time":"10:00",


"name":"aboba"

}


И спокойно делаешь что-то на уровне:


file = json.read(file.json)

name = file["name"] time = file["time"]


Уверен, что в джаве можно так же или примерно так же.

В задании написано написать программу, а не алгоритм, соответственно, считаю, что библиотеки можно использовать

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
haHAA сказал(а):

Я всегда гуглю без использования всяких вспомогательных how,why,what


"java gson read json"

"read json java"

"java json to map"


Последний запрос я бы посоветовал вбить, т.к. приходилось поработать с джейсоном в питоне - там можно json превратить в словарь/dict/map и спокойно работать с ним


Например, json

{


"time":"10:00",


"name":"aboba"

}


И спокойно делаешь что-то на уровне:


file = json.read(file.json)

name = file["name"] time = file["time"]

Уверен, что в джаве можно так же или примерно так же.

В задании написано написать программу, а не алгоритм, соответственно, считаю, что библиотеки можно использовать

Нажмите, чтобы раскрыть...


Обе из них стринг верно?
А у меня в Json файл был в таком формате.

{

"tickets": [{
"origin": "VVO",
"origin_name": "Владивосток",
"destination": "TLV",
"destination_name": "Тель-Авив",
"departure_date": "12.05.18",
"departure_time": "16:20",
"arrival_date": "12.05.18",
"arrival_time": "22:10",
"carrier": "TK",
"stops": 3,
"price": 12400, "еще десяток таких объектов в массиве"]

}

Это объект, с объектов в массиве.


Cоответственно всё усложнялось, до этого офк я попробовал обычный json в объект перенести там было два стринга с name и surname, всё отлично получалось.


AtagaN сказал(а):

Советую конкретнее формулировать вопрос. В чем проблема?

Прочитать файл?

Парсить его?

Я так понимаю ты ищешь готовые решения и пытаешься их натянуть на свою задачу. Так не пойдет.



Нажмите, чтобы раскрыть...


Разве не для этого придумали stackoverflow и библиотеки?

ke1evra

Пользователь

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

ke1evra

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

img
Ectx сказал(а):

Теперь вопрос, где и как искать инфу? Как правильно гуглить? Что и где читать? Как научиться читать документацию?(B2 english с переводчиком справляюсь на ура)? Как научиться решать поставленные задачи?

Нажмите, чтобы раскрыть...

это как раз показательный момент для тех, кто кричит "математика не нужна". в школе тебе дают набор формул и примеры решений, затем в дз ты должен по имеющейся информации синтезировать решение. таким образом тренируется аналитическое мышление.


вывод - ускорить нахождение ответов прокачкой логики ты уже не можешь, тебе остаётся только идти через опыт, а опыт это время. чем больше будет опыта - тем быстрее ты будешь находить ответы (в геометрической прогрессии, если хочешь)


с июля в джаву, джсоны... не расстраивайся, по факту ты в 7 лет хочешь пойти в 9 класс учиться. это так не работает.

джава это ооп, за месяц всё выучить? не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)


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

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
ke1evra сказал(а):

это как раз показательный момент для тех, кто кричит "математика не нужна". в школе тебе дают набор формул и примеры решений, затем в дз ты должен по имеющейся информации синтезировать решение. таким образом тренируется аналитическое мышление.


вывод - ускорить нахождение ответов прокачкой логики ты уже не можешь, тебе остаётся только идти через опыт, а опыт это время. чем больше будет опыта - тем быстрее ты будешь находить ответы (в геометрической прогрессии, если хочешь)


с июля в джаву, джсоны... не расстраивайся, по факту ты в 7 лет хочешь пойти в 9 класс учиться. это так не работает.

джава это ооп, за месяц всё выучить? не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)


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

Нажмите, чтобы раскрыть...


Не слишком ли ты загнул с 7 летом и 9 классом? И к тому же не всё же так фундаментально и требует простых знаний в тех или иных местах, сериализатор(в этом случае чтение с gson) как то связан с алгеброй и формулами. Писал бы я всё с нуля то я бы понялд

боби (3)

Пользователь

Регистрация: 19.10.2021

Сообщения: 869

Рейтинг: 452

боби (3)

Регистрация: 19.10.2021

Сообщения: 869

Рейтинг: 452

ke1evra сказал(а):

не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)

Нажмите, чтобы раскрыть...

зачем, чтобы быть труъ задротом??? и че месяц массивы изучать, методы для работы с ними? зачем вообще что-то читать с минимумом практики, это же для лохов полных, которые гордятся тем что они умеют диффуры второго порядка считать и работают за 40 тыщ прогерами на фортране

ivarti

Пользователь

Регистрация: 08.09.2013

Сообщения: 16

Рейтинг: 1

ivarti

Регистрация: 08.09.2013

Сообщения: 16

Рейтинг: 1

10000 видосов на ютубе по теме парсинга джсонов, но ты зачем-то спрашиваешь это на форуме по доте 2.

ke1evra

Пользователь

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

ke1evra

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

img
Ectx сказал(а):

Не слишком ли ты загнул с 7 летом и 9 классом? И к тому же не всё же так фундаментально и требует простых знаний в тех или иных местах, сериализатор(в этом случае чтение с gson) как то связан с алгеброй и формулами. Писал бы я всё с нуля то я бы понялд

Нажмите, чтобы раскрыть...

если ты с ютуба не можешь спроецировать решение в свою задачу, то нет, вообще ни разу не слишком =)


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


но, раз ты не можешь даже это реализовать через месяц - то считай, что для тебя это с нуля и тем более нужно читать теорию.


P.S. при чём здесь сериализатор и алгебра с формулами? ты видимо даже не понял, к чему я это написал...

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
ke1evra сказал(а):

если ты с ютуба не можешь спроецировать решение в свою задачу, то нет, вообще ни разу не слишком =)


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


но, раз ты не можешь даже это реализовать через месяц - то считай, что для тебя это с нуля и тем более нужно читать теорию.


P.S. при чём здесь сериализатор и алгебра с формулами? ты видимо даже не понял, к чему я это написал...

Нажмите, чтобы раскрыть...

Так прикольно что ты меня тотал дураком выставляешь. Ты пишешь к делу но совсем не то что нужно

ke1evra

Пользователь

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

ke1evra

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

img
Ectx сказал(а):

Так прикольно что ты меня тотал дураком выставляешь

Нажмите, чтобы раскрыть...

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

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
ke1evra сказал(а):

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

Нажмите, чтобы раскрыть...


Ахахах, ясно чел спасибо

ke1evra

Пользователь

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

ke1evra

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

img
Ectx сказал(а):

Ахахах, ясно чел спасибо

Нажмите, чтобы раскрыть...

да не за что) ты же сам сначала задаёшь вопрос "что делать?" и в следующем сообщении пытаешься сказать, что это несложно. так в чём проблема тогда? PeepoAnd.png

Tor4illa

Пользователь

Регистрация: 26.04.2020

Сообщения: 1469

Рейтинг: 258

Tor4illa

Регистрация: 26.04.2020

Сообщения: 1469

Рейтинг: 258

Сразу скажу, я не джавист. Тебе просто надо погуглить как парсить эти json-ы.


Краткий алгоритм: ввод json-a -> парсинг и расчет статистики -> вывод результатов


Я так понял (прочитав статью на хабре), что json это просто контейнер типа map, где есть key и value. И у тебя есть много этих элементов контейнера. Накидал за пару минут код на плюсах. QDateTime - это такой класс для работы с датой и временем. Для объектов этого класса есть метод secsTo, который возвращает разницу двух дат (и времен) и метод setdate(settime), который устанавливает дату (время). Наверное в java есть какой-то аналог - погугли. Также я понятия не имею как реализовать вывод (да и ввод) в файл (из файла) в java, мб в этом языке тоже есть такое понятие как "поток". Расчет 90-процентиля сходу не напишу, надо чуть посидеть над алгоритмом


код на c++ (qt)

Meepka

Пользователь

Регистрация: 08.10.2012

Сообщения: 1954

Рейтинг: 485

Meepka

Регистрация: 08.10.2012

Сообщения: 1954

Рейтинг: 485

Tor4illa сказал(а):

Сразу скажу, я не джавист. Тебе просто надо погуглить как парсить эти json-ы.


Краткий алгоритм: ввод json-a -> парсинг и расчет статистики -> вывод результатов


Я так понял (прочитав статью на хабре), что json это просто контейнер типа map, где есть key и value. И у тебя есть много этих элементов контейнера. Накидал за пару минут код на плюсах. QDateTime - это такой класс для работы с датой и временем. Для объектов этого класса есть метод secsTo, который возвращает разницу двух дат (и времен) и метод setdate(settime), который устанавливает дату (время). Наверное в java есть какой-то аналог - погугли. Также я понятия не имею как реализовать вывод (да и ввод) в файл (из файла) в java, мб в этом языке тоже есть такое понятие как "поток". Расчет 90-процентиля сходу не напишу, надо чуть посидеть над алгоритмом


код на c++ (qt)

Нажмите, чтобы раскрыть...

https://www.w3schools.com/CPP/cpp_switch.asp

Tor4illa

Пользователь

Регистрация: 26.04.2020

Сообщения: 1469

Рейтинг: 258

Tor4illa

Регистрация: 26.04.2020

Сообщения: 1469

Рейтинг: 258

Meepka сказал(а):
Нажмите, чтобы раскрыть...

может ты и прав: со свитчем красивее

тот же цикл, но со switch

ke1evra

Пользователь

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

ke1evra

Регистрация: 25.12.2012

Сообщения: 1470

Рейтинг: 1301

img
Tor4illa сказал(а):

Накидал за пару минут код на плюсах. QDateTime - это такой класс для работы с датой и временем

Нажмите, чтобы раскрыть...

QDateTime это фреймворк QT, он конечно написан на плюсах, но ты перебарщиваешь)

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img

Спасибо всем кто отозвался. Сегодня задача было решена мной. Был наговнокоден жестко. Задача с процентилем 90 пока не была решена.
А только среднее время перелетов.


https://github.com/Ectx369/anylogic

Можете покекать, код можно сделать лаконичнее и посидеть разложить по норм классом собрать Jar и по феншую. Но я так надолбался что скоро всё сделаю как надо или забуду)))


Armagedonby_ZERGS

Пользователь

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

Armagedonby_ZERGS

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

Tor4illa сказал(а):

что json это просто контейнер типа map, где есть key и value.

Нажмите, чтобы раскрыть...

Джсон это JavaScript Object Notation - это обычный объект который записан в виде стринги.
Эту стрингу конечно можно как дурачек парсить руками - но это бред. Есть куча реализаций парсера в виде готовых либ.
Самые популярные Jackson и GSON, лучше юзать 1ю, так она стандарт в самых популярных фреймворках.
Дальше, ему надо описать клас, в который он будет мапить свой джсон, для этого нужно прочитать полностью всю джсонку которая ему летит, и описать каждое поле.
Для этого конечно нужно знать ситаксис джсона, и понимать как там описаны массивы, мапы, объекты, и обычные значения.
После этого дело за малым, взять еще одну либу для работы с файлами, прочитать файл, замапить мапером из стринги в объект в джаве, и уже потом в джаве у тебя будет объект со всеми данными с которыми делаешь что хочешь.

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1542

Рейтинг: 455

Нарушения: 10

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1542

Рейтинг: 455

Нарушения: 10

Armagedonby_ZERGS сказал(а):

Джсон это JavaScript Object Notation - это обычный объект который записан в виде стринги.
Эту стрингу конечно можно как дурачек парсить руками - но это бред. Есть куча реализаций парсера в виде готовых либ.
Самые популярные Jackson и GSON, лучше юзать 1ю, так она стандарт в самых популярных фреймворках.
Дальше, ему надо описать клас, в который он будет мапить свой джсон, для этого нужно прочитать полностью всю джсонку которая ему летит, и описать каждое поле.
Для этого конечно нужно знать ситаксис джсона, и понимать как там описаны массивы, мапы, объекты, и обычные значения.
После этого дело за малым, взять еще одну либу для работы с файлами, прочитать файл, замапить мапером из стринги в объект в джаве, и уже потом в джаве у тебя будет объект со всеми данными с которыми делаешь что хочешь.

Нажмите, чтобы раскрыть...

А в яве нет простого преобразования жсона в нативные структуры? Ну там, объект в мапу, массив в лист или аррайлист?

Jeivi

Пользователь

Регистрация: 30.03.2013

Сообщения: 2430

Рейтинг: 845

Jeivi

Регистрация: 30.03.2013

Сообщения: 2430

Рейтинг: 845

img

почитай "грокаем алгоритмы"

Armagedonby_ZERGS

Пользователь

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

Armagedonby_ZERGS

Регистрация: 23.03.2015

Сообщения: 11361

Рейтинг: 4428

DrZoidberg сказал(а):

А в яве нет простого преобразования жсона в нативные структуры? Ну там, объект в мапу, массив в лист или аррайлист?

Нажмите, чтобы раскрыть...

А как он должен быть? Джсон это стандарт жаваскрипта.
В Жсоне есть андефайнед - в джаве его нет.
В Жсоне все цифры это тип Number в джаве целочисленных ссылочных типов - два.
С коллекциями тоже, в джаве их много видов.

Поэтому да, простого нет. Но это на чистой джаве.
Хорошие новости, что фреймворки это делают под капотом на автомате. Тебе нужно только описать дтошку-объект который ты хочешь получить. Фреймворк все сделает за тебя. Но как работает либа под капотом фреймворка и как его настраивать под спец задачи - знать нужно.

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
Jeivi сказал(а):

почитай "грокаем алгоритмы"

Нажмите, чтобы раскрыть...

Книги не мое

Noonecan

Пользователь

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

Noonecan

Регистрация: 14.03.2014

Сообщения: 1248

Рейтинг: 344

Ectx сказал(а):
Нажмите, чтобы раскрыть...

Совет, которого не просили:

1. пиши тесты, не важно какие они будут, как много они проверяют. Для начала просто протестируй haapy-way и один фиговый путь (любой изъян). Можешь пользоваться плагином покрытия кода у самой IDE.

Как только приучишь себя писать тесты - 80% ошибок будешь ловить еще до деплоя.


2. Обрабатывай исключения, сейчас твой код просто выбрасывает исключения, не логирует никаких данных. Напиши простейший вывод System.err.println("Поломались на процессе вычитать все из файла"). Это поможет разобраться, на каком моменте ты сломался


3. Называй переменные читаемыми именами, чтобы понимать за что оно вообще отвечает, через месяц откроешь свой код - и будешь полчаса разбирать, какая переменная за что отвечает


А в целом - да неплохо для начального уровня.

Стримы поиспользовал, тредсейф переменные поиспользовал.