Ответы пользователя по тегу Java
  • Прога отрабатывает только половину, как прогонять первый if по всему массиву?

    LaRN
    @LaRN
    Senior Developer
    У вас в коде нужно поменять проверку, вы сравниваете i c условиями, а нужно сравнивать i-й элемент массива
    DZ[i]
    Ответ написан
    1 комментарий
  • Почему не работает ввод с консоли Java?

    LaRN
    @LaRN
    Senior Developer
    Если используете класс Scanner, то для считывания чисел из потока удобнее использовать пару методов hasNextInt и nextInt.

    Возможно в вашем случае первый вызов scanner.nextLine() вычитал весь поток и при втором вызове вернулась пустая строка.
    Ответ написан
    Комментировать
  • Как уменьшить время выполнения программы?

    LaRN
    @LaRN
    Senior Developer
    Если нужна только первая пара, то не нужно цикцы крутить до конца. Прерывайте их как только в первый раз сработает if (a[i] + b[j] > w)
    Ответ написан
    Комментировать
  • Существуют ли отладчики для исполняемых Java программ?

    LaRN
    @LaRN
    Senior Developer
    Про удалённую отладку вот тут можно аюпосмотреть.
    https://www.baeldung.com/java-application-remote-d...
    Ответ написан
    Комментировать
  • Как реализовать проверку четырехугольника на вырожденность в Java?

    LaRN
    @LaRN
    Senior Developer
    Четырехугольник вырожденный, если его площадь равна нулю.
    Для четырехугольника это будет выполняться если все вершины лежат на одной прямой.

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

    Например так:
    vAB.x=b.X-a.X
    vAB.y=b.Y-a.Y

    vAC.x=c.X-a.X
    vAC.y=c.Y-a.Y

    vAD.x=d.X-a.X
    vAD.y=d.Y-a.Y

    Теперь находим скалярное произведение векторов vAB*vAС и vAB*vAD, если оба равны единице, то четырехугольник вырожденный.

    Найти скалярное произведение от координат векторов можно так:
    s(v1, v2) = (v1.x*v2.x+v1.y*v2.y)/(sqrt(v1.x*v1.x+v1.y*v1.y)*sqrt(v2.x*v2.x+v2.y*v2.y))

    Либо второй вариант, можно пойти от уравнения прямой:
    (b.x-a.x)/(b.y-a.y)=(c.x-a.x)/(c.y-a.y)=(d.x-a.x)/(d.y-a.y)=t
    и тут, чтобы уйти от деления можно так переписать уравнение:
    (b.x-a.x)*(c.y-a.y) =(c.x-a.x)*(b.y-a.y)
    (b.x-a.x)*(d.y-a.y) =(d.x-a.x)*(b.y-a.y)
    Если оба равенства выполняются, то четырехугольник вырожденный
    Ответ написан
    Комментировать
  • Java, эта задача решается только через множество if?

    LaRN
    @LaRN
    Senior Developer
    Если не хочется заморачиваться на проверку границ массива можно дважды пройтись по массиву, вначале слева-направо затем наоборот.
    Первый проход от 0 элемента до array.length - 2
    включительно.
    Вот так:
    5 3 8 1
    array[i] = min([array[i], array[i+1])
    На выходе получим
    5-3 - > 3
    3-5 - > 3
    8-1 - > 1
    Второй проход от array.length - 3 до 1 включительно.
    array[i] = min([array[i], array[i+1])
    На выходе получим
    3-1 - > 1
    И на 0 индексе уже стоит число 3 его не трогаем.
    В итоге в выходной массиве в диапазоне индексов [0;array.length - 3] будет находиться ответ.
    В нашем примере ответ это подмассив [0;1]
    И там должно быть 3 1
    Ответ написан
    Комментировать
  • Как лучше передать единственный параметр в JSON Post?

    LaRN
    @LaRN
    Senior Developer
    Если в будущем может потребоваться расширить набор передаваемых полей, то используя сейчас POJO с одним полем потом меньше переписывать придётся.
    Ответ написан
    Комментировать
  • Стоит ли бросать кастомные ошибки, если этити не найдено в API?

    LaRN
    @LaRN
    Senior Developer
    Своей класс исключения имеет смысл бросать, если у вас для этого класса описан хэндленр, который сформиует правильный по бизнесу http ответ например.
    Вот тут описано как это делать
    https://spring.io/blog/2013/11/01/exception-handli...

    А строки не обязательно конкатенировать, можно использовать StringBuilder или String.format() например.
    Ответ написан
    3 комментария
  • Где здесь ошибка?

    LaRN
    @LaRN
    Senior Developer
    static метод в интерфейсе должен иметь реализацию.
    Ответ написан
    Комментировать
  • Как указывать параметр запроса "кириллицей" на OpenWeatherMap?

    LaRN
    @LaRN
    Senior Developer
    У этого API есть возможность задать вместо названия города координаты.
    api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}

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

    Можно даже попробовать не хранить координаты городов в приложении, а условно гуглить по имени города или получать геолокацию с устройства на котором запущено приложение.
    Ответ написан
    4 комментария
  • Как решить эту задачку?

    LaRN
    @LaRN
    Senior Developer
    Нужно использовать целочисленное деление и получение остатка от деления.
    Пример:
    int a,b;
    a = 100;
    b = 60;
    int c = a / b; // Ответ: с = 1
    int d = a% b; // Ответ: d = 40

    Первым действием найдёте количество часов, а вторым количество минут от не полного часа.
    Ответ написан
    2 комментария
  • Почему не работает так как надо вывод попыток?

    LaRN
    @LaRN
    Senior Developer
    Переменная numberOfTries локальная, объявлена в процедуре checkGuess(), поэтому при каждой попытке счёт начинается с 0 и предыдущие попытки не учитываются.
    Для вашей задачи можно добавить классу GuesstingGame поле, отвечающее за текущее количество попыток. При старте каждой новой сессии игры это поле нужно обнулять, а в процессе игры увеличивать.
    Ответ написан
    Комментировать
  • Нахождение числа в массиве. Как вывести только один ответ?

    LaRN
    @LaRN
    Senior Developer
    При выходе из цикла всегда будет писать что не найдено, нужно ещё флаг использовать.
    Например так.
    boolean f = false;
    for (int j : arr) {
    if (j == x) {
    f = true;
    break;
    }
    }
    if (!f)
    {System.out.println("Нету!");}
    else
    {System.out.println("Есть!");}
    Ответ написан
    Комментировать
  • Добавление текста в приложение в андроид студио java. Как добавить текст с таблицами?

    LaRN
    @LaRN
    Senior Developer
    Может имеет смысл все это добавлять в БД, а не в ресурсы?
    Можно сформировать файл для БД SQLite и его читать из приложения.
    Ответ написан
    2 комментария
  • Как построить логику приложения?

    LaRN
    @LaRN
    Senior Developer
    Можно и одним массивом обойтись, если положить по индексу равном коду символа его цифру.
    Например если ваш алфавит начинается с латинской А, то можно посчитать её за 0 и
    заполнить массив так
    int [] code;
    code[0] =1; // символ A
    code[1] =2; // символ B
    ...
    А искать нужный код так:
    code[(char) x - (char) 'A')]
    x - это переменная в которую последовательно считывается символы из введенной строки.
    Ответ написан
    Комментировать
  • Почему программа не запрашивает текст, ввожу в консоль предложения и ничего не происходит?

    LaRN
    @LaRN
    Senior Developer
    Попробуйте вместо next() использовать nextLine() и затем анализируйте наличие done в считанной строке.
    Ответ написан
    5 комментариев
  • Как выполнить отбор массива кода с классом?

    LaRN
    @LaRN
    Senior Developer
    Массив у вас объявлен как Znak [] String, но далее вы делаете так:
    String goal = in.nextLine();
    if (String[i] == goal)
    Т.е. переменная goal типа String сравнивает с элементом массива String[i], который имеет тип Znak.
    Вы себя запутал назвав массив String.
    Ответ написан
    Комментировать
  • Объясните почему работает именно так?

    LaRN
    @LaRN
    Senior Developer
    Похоже это сделано, чтобы убрать возможные дубли. Нажмите на кнопку клавиатуры и держите, вы увидите, что будет напечатана не одна буква, а серия. И вся эта серия улетит в System.in.
    Вот и получается либо нужно пропустить все что идёт за первой буквой, либо на экране будет несколько сообщений подряд о том что попытка отгадать провалилась. Т.е. тут как бы расчищается дорога для следующей попытки.
    Ответ написан
    1 комментарий
  • Как объеденить пользователей с общим имейл?

    LaRN
    @LaRN
    Senior Developer
    Можно вот так попробовать.
    В первом hashmap можно хранить пару mail-user, во втором hashmap пару user - user.
    Пример:
    u1-m1, m2
    u2-m3, m2
    u3-m4
    u5-m4, m5, m1

    Идём по списку, обрабатывает пару u1-m1.
    m1-u1 -> heshmap1
    Дальше аналогично для второй пары:
    m2-u1 -> heshmap1
    Для следующей пары:
    m3-u2 -> heshmap1
    Следующая пара, тут важный момент, т.к. ключ
    m2 уже есть в heshmap1, то не нужно туда ничего писать, а нужно добавить в
    heshmap2 для ключа u2 значение u1, потому что в heshmap1 значение для ключа m2 есть u1.
    Т.е. имеем u2-u1 -> heshmap2
    Далее
    m4-u3 -> heshmap1
    Затем, т.к. ключ m4 уже есть в heshmap1 снова идём в heshmap2:
    u5-u3 -> heshmap2
    Далее
    m5-u5-> heshmap1
    И последний шаг u5 - m1, тут нюанс, в heshmap1
    уже есть ключ m1 значит идём в heshmap2, но там тоже уже есть ключ u5, значит нужно уже имеющуюся в heshmap2 пару u5-u3 удалить и вместо неё добавить две новые:
    u3-u1-> hashmap2
    u5-u1-> hashmap2
    Значение u1 берём из hashmap1[m1]

    В итоге имеем:
    heshmap1
    m1-u1
    m2-u1
    m3-u2
    m4-u3
    m5-u5
    heshmap2
    u2-u1
    u3-u1
    u5-u1
    Далее идём по ключам heshmap1(это email) и определяем для каждого из них значение из heshmap2 (это пользователи).
    mail = heshmap1[heshmap1.key[i]]
    user = heshmap2[heshmap1[mail]]
    Если в heshmap2 нет какого-то значения, значит берём юзера из heshmap1.key[i]

    В итоге соединив два heshmap получим такой список:
    u1-m1
    u1-m2
    u1-m3
    u1-m4
    u1-m5
    Т.е. все email принадлежат одному юзеру.
    Ответ написан
  • Почему entity-класс не может существовать внутри другого entity-класса?

    LaRN
    @LaRN
    Senior Developer
    Эти аннотации в итоге нужны для описания взаимоотношений сущностей БД.
    Одна сущность может быть вложена в другую, но нужно указать взаимоотношения между ними.
    Вот тут есть описание:
    https://www.tutorialspoint.com/jpa/jpa_entity_rela...
    Смотрите аннотации:
    @ManyToOne Relation
    @OneToMany Relation
    @OneToOne Relation
    @ManyToMany Relation
    Ответ написан
    Комментировать