• Как правильно передать данные с одного Activity на другое Activity?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    R.id.view нет в разметке.
    Ответ написан
  • Как правильно вызвать void метод в main?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Ошибка в строке
    Complex res = real.increment(imaginary);
    и в
    System.out.println(real.increment(imaginary));
    такая же ошибка. Метод increment возвращает void, и изменяет внутреннее значение. void нельзя ничему присвоить, и нельзя никуда передать. Можешь считать это "пустотой", "ничем". void метод ничего не возвращает, поэтому его возвращаемое значение нельзя никуда присвоить.
    Нужно разнести это в разные строки:
    real.increment(imaginary);
    System.out.println(real);
    Ответ написан
    1 комментарий
  • Что использовать Kotlin Multiplatform или Flutter?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Точно могу сказать, что НЕ Kotlin Multiplatform. Ты этого не хочешь, 100%. Технология сырая и не готова.
    Flutter вроде как зарелизили, можно попробовать туда сунуться, но быть готовым к тому, что там есть нерешённые пока проблемы.
    Ответ написан
    4 комментария
  • Как не вызывать деструктор два раза?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Проблема здесь не в деструкторе, а в конструкторах. Тебе нужно реализовать конструкторы копирования и перемещения, иначе у тебя так и будут постоянно копироваться указатели из инстанса в инстанс, а при уничтожении будут в итоге такие крещи, как ты описал. Сейчас дефолтный конструктор копирования работает при передаче аргументов и при возврате из функции. Локально это можно полечить ссылками, но глобально – только правильные конструкторы.
    Ответ написан
    Комментировать
  • Компилятор выдаёт ошибку c++, что надо исправить?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    с неинициализированна. Надо не через запятую перечислять, а через >>. Запятая просто позволяет объединить выражения.
    Ответ написан
    Комментировать
  • Остаток от деления на машине Тьюринга?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    В общем порекомендую сначала прикинуть алгоритм на естественном языке, в смысле, как бы это могло быть:
    Встаем на %.
    Пока в делителе есть 1, заменяем её на Х, и заменяем одну 1 в делимом на Y. Если в делимом нет единиц(нечего заменить на Y), то переносим все Y в виде 1 на ячейки после "->". Это и есть ответ.
    Когда в делителе все 1 заменены на Х, заменяем их обратно на 1 и проверяем, остались ли ещё 1 в делимом.
    Если в делимом остались единицы, заменяем все Y на 0, встаем на % и начинаем всё это заново.
    Если в делимом единиц не осталось, то переносим все оставшиеся Y в виде 1 на ячейки после "->". Это и есть ответ.
    Тут была ошибка. Мы только что успешно закончили отнимать очередной делитель, и в делимом больше ничего не осталось. Это значит, что разделилось нацело.

    Не скажу, что это оптимально, но работать будет. Может быть , надо продумать ещё какие-то корнер кейсы, но идея должна быть понятна. По сути ты просто отнимаешь от делимого делитель до тех пор, пока делимое не станет меньше делителя.
    Теперь каждое из этих правил надо оформить в виде набора правил для МТ. Всех этих "когда/если/то" в МТ конечно нет, поэтому придется эмулировать их переходами в соответствующее состояние. Это не сложно, но правил может получиться реально много. Например, простая фраза "Пока в делителе есть 1, заменяем её на Х, и заменяем одну 1 в делимом на Y." будет развернута в 3-5 состояний.

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

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Я тебе так скажу - вторая Активити тебе не нужна. Тебе нужны фрагменты. Ничего сложного там нет. Открывай developers.android.com и читай по темам. Делай свой проект, добавляй фичи. Книги на русском? Забудь, по андроиду это не катит. Книги по Котлину? Порешай коаны.
    Ответ написан
    Комментировать
  • Как с одной переменной сделать несколько или как парсить одну переменную?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    String.split
    Ответ написан
    Комментировать
  • Почему выбрасывает ArrayIndexOutOfBoundsException?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    В том, что массив files пустой. Написано же.
    Ответ написан
    Комментировать
  • Merge vs Rebase - что лучше использовать?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Вкусовщина, лично мне больше нравится merge. Хотя бы тем, что конфликты с мастером можно пофиксить один раз без приседаний. С ребейзом фиксить конфликты, особо, если один и тот же кусок кода менялся неоднократно, это боль. Сейчас у нас запрещен мерж, есть только ребейз, и я страдаю:(
    Форс пуш в свою ветку это норма, ничего страшного в этом нет.
    Ответ написан
    6 комментариев
  • Почему уменьшился размер изображения при перезаписи?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    По идее, жмёт его ImageIO.write, больше некому. Судя по всему, контролировать степень cжатия в этом методе нельзя.
    ImageReader reader = ...; //ImageIO.getImageReaders(ImageIO.createImageInputStream(stream))
    reader.setInput(...);
    IIOImage image = reader.readAll(0, null); 
    
    RenderedImage renderedImage = image.getRenderedImage();
    ImageWriter writer = ImageIO.getImageWriter(reader);
    ImageWriteParam param = writer.getDefaultWriteParam();
    paran.setCompressionMode(MODE_COPY_FROM_METADATA);  
    writer.setOutput(...);
    writer.write(null, image, param);

    Должно быть примерно как-то так.
    Ответ написан
    Комментировать
  • Как реализовать такую задачу?

    zagayevskiy
    @zagayevskiy Куратор тега Kotlin
    Android developer at Yandex
    Разобрать выражение на токены простейшим конечным автоматом.
    Преобразовать список токенов в польскую инверсную запись алгоритмом сортировочной станции или рекурсивным спуском.
    Интерпретировать полученный ПОЛИЗ простым стековым алгоритмом.
    На час работы. Никаких сраных реплейсов и выкусываний кусков строки регеспами.
    Ответ написан
    Комментировать
  • Нужно понять что значит код и что выведется на экран?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Тебе нужно понять, что такое массивы и строковые константы в С++, также указатели и адресную арифметику. После этого ты точно будешь понимать, что происходит.
    Ответ написан
    Комментировать
  • Как использовать "is" в предикатах?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    is точно не должен быть в середине. Если он нужен по смыслу, то только в начале.
    Ответ написан
    Комментировать
  • Как мне это реализовать в List?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Ответ написан
    Комментировать
  • Должны ли переменные final ( не static ) всегда писаться большими буквами?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Нет. И я тебе больше скажу, все переменные, какие возможно, надо объявлять final. У тебя их в программе должно быть большинство.
    Ответ написан
    Комментировать
  • Почему методы или код работают не так?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Непонятно, почему ты так решил. Скорее всего, ты считаешь, что вызвав reset, ты "убираешь" пометку с позиции. Но это не так, в контракте reset этого нет.
    If such an IOException is not thrown, then the stream is reset to a state such that all the bytes read since the most recent call to mark (or since the start of the file, if mark has not been called) will be resupplied to subsequent callers of the read method

    Поэтому ты каждый раз ресетишь стрим на помеченную позицию, и всё зацикливается.
    Ответ написан
    1 комментарий
  • Почему постоянно используют функцию copy в реактивных подходах?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Преимущество в том, что при использовании иммутабельных объектов поток данных остаётся однонаправленным. А если ты будешь мутировать объекты, могут произойти адские спецэффекты. Например.
    data class Data(var x : Int)
    
    Observable.just(1, 1, 2, 2)
        .doOnNext { print("I'm $it") }
        .map(::Data)
        . distinctUntilChanged()
        .map{
           it.apply{ x++ }
        }
        .doOnNext { print("Now I'm $it") }
        .subscribe()

    Что оно напечатает? Прямо так сходу и не скажешь, тут думать надо. И какого поведения ждал автор такого кода? Непонятно. А это примитивная цепочка, представь, какая жесть может случиться в более сложной ситуации.
    Ответ написан
    Комментировать
  • Как обратиться к определенному девайсу по adb если у меня их несколько?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    $ adb devices
    List of devices attached 
    emulator-5554   device
    7f1c564e    device
    
    $ adb -s 7f1c564e <command>
    Ответ написан
    Комментировать