Ответы пользователя по тегу Kotlin
  • Как правильно учиться Android разработке?

    @foonfyrick
    Эти книги предназначены для ознакомления, не более. Продолжай как начал, ознакомься со всеми возможностями, которая преподносит книга, потом каждую тему гугли по отдельности: что такое активность, что такое фрагмент, какие у них отличия, какие у них методы, почему лучше использовать одну активность, что такое такс, что такое бакстак, как это работает, почему так сделали.
    Но если ты не можешь объяснить самые базовые вещи языка, что из себя представляет массив или хэш карта под капотом, как устроены классы, наследующие интерфейс Set, то рано тебе еще в андройд лезть, там слишком много информации, которую нельзя выучить кусками, всё связанно и нужно учить всё сразу.
    Ответ написан
    Комментировать
  • Где найти учебник по Котлин?

    @foonfyrick
    Я две книги читал, там на пол книги вода одна, читать это невыносимо скучно, ощущение что для школьников писали, никаких глубоких объяснений тебе там не найти, ты либо читаешь доки, либо гуглишь, например habr что такое переменная, habr что такое объект, habr что такое jvm и читаешь многостраничную статью, книги неэффективны, по крайней мере те, которые читал я. И вообще лучше изучать язык в сравнении, например, с языком, имеющим динамическую типизацию.
    Для начала проще курс на metanit пройти, там все коротко и с примерами, за 2 дня пройдешь, а потом уже глубже изучай. Да и вообще, для какой цели ты учишь?
    Ответ написан
    2 комментария
  • Могу ли я попросить вас о критике кода?

    @foonfyrick
    Все что в if'ах у тебя, я бы вынес в отдельную функцию, разбираться что там происходит нет никакого желания.
    val gameChose = getGameChose(options)
    val userChoice = getUserChose(options)
    getResult(gameChose, userChoice)
    println("Do you want to play any more?")
    playGameAnswer = readLine()

    println("Oh..so sad. So, goodbye")
    break

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

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

    @foonfyrick
    Можно на активити, можно на фрагментах, главное понять разницу, и почему на фрагментах лучше.
    Ответ написан
  • Почему не обнаруживается NavController?

    @foonfyrick
    val navController=Navigation.findNavController(this,R.id. navigation_main_graph )
    Твой пример немного отличается от моего, у меня было так:
    <fragment
            android:id="@+id/fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            fab:defaultNavHost="false"
            fab:navGraph="@navigation/nav_graph" />

    open class MainActivity : AppCompatActivity() {
        private lateinit var navController:NavController
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            //creating backArrow
            navController=Navigation.findNavController(this,R.id.fragment)
            NavigationUI.setupActionBarWithNavController(this,navController)
        }
        override fun onSupportNavigateUp(): Boolean {
            return navController.navigateUp()
        }
    Ответ написан
    Комментировать
  • Anroid, как записать json используя Retrofit2, RxJava2?

    @foonfyrick
    В том месте, где ты все выводишь в логи, присвой это туда, куда тебе нужно.
    Ответ написан
  • Стоит ли проходить платные курсы (Skill-Branch и т.д. и т.п.) на позицию Kotlin-разработчика на данный момент?

    @foonfyrick
    Все курсы, кроме тех, что дают гарантию трудоустройства для лучших учеников, основаны на такой идее - важно завлечь клиента чтобы вытащить с него побольше денег, в замен мы дадим знания(которые он усвоит как попало, и если у него к нам будут претензии, мы скажем - вы заплатили, мы дали вам знания, вы не поняли - ваши проблемы).
    Ответ написан
    Комментировать
  • Как с одного файла переписать в другой?

    @foonfyrick
    val fr = FileReader("f.txt")
        val array=fr.readText()
            .substringAfter(':')
            .substringBefore('К')
            .split(' ')
            .toList()
            .filter { !it.contains('0') && !it.contains('-') }
        println(array)
    fr.close()


    val newFw = FileWriter("g4.txt")
        var numbers = ""
        numbers = array.toString()
            .substringAfter('[')
            .substringBefore("]")
            .filter { !it.isWhitespace() && !it.equals(',') }
        newFw.append(numbers)
        newFw.close()
    Ответ написан
  • Почему в файле выводится лишь ответ?

    @foonfyrick
    Почти правильно сделал, просто надо file на FileWriter заменить и поставить append=true.
    Еще у тебя неверно считывает значения из файла, их иногда на 1 меньше.
    fun main() {
        val fileName = "f18.txt"
        val file = File(fileName)
        val fw =FileWriter(file,true)
        println("Введите диапазон A: ")
        val a = readLine()!!.toInt()
        println("Введите диапазон B: ")
        val b = readLine()!!.toInt()
        if ( a < b )
        {
            var positive = 0
            var negative = 0
            println("Введите количество чисел: ")
            val count = readLine()!!.toInt()
            val massive = IntArray(count)
            fw.appendln("Исходный массив:")
            fw.flush()
            for ( i in 0 until count )
            {
                massive[i] = (a..b).random()
                fw.appendln("${massive[i]} ")
                when
                {
                    massive[i] > 0 -> positive++
                    massive[i] < 0 -> negative++
                }
            }
            fw.appendln("Количество положительных: $positive")
            fw.flush()
            fw.appendln("Количество отрицательных: $negative")
            fw.flush()
            when
            {
                positive > negative -> fw.appendln("В массиве положительных чисел больше отрицательных")
                positive < negative -> fw.appendln("В массиве отрицательных чисел больше положительных")
                positive == negative -> fw.appendln("В массиве одинаковое количество положительных и отрицательных чисел")
            }
            fw.flush()
    
        }
        else println("Введен не правильный диапазон.")
        fw.close()
    }
    Ответ написан
    2 комментария
  • Как работать с файлами в Kotlin?

    @foonfyrick
    Ответ написан
    Комментировать
  • Как задать режим открытия файлу?

    @foonfyrick
    FileOutputStream второй параметр задает способ записи, true - добавление в конец.
    Ответ написан
    Комментировать
  • Jackson конвертация в json и обратно в дата класс?

    @foonfyrick Автор вопроса
    нужно добавить зависимость jackson-module-kotlin.
    object:TypeReference(){] не нужен, так же добавить аннотацию к конструктору класса @JasonCreator и каждому полю @JasonProperty("name") .
    Ответ написан
    Комментировать
  • Стоит ли начинать изучение Kotlin с книги "Kotlin в действии" в 2021?

    @foonfyrick
    Слишком много воды в книге, трата времени, проще на метанит зайти там бесплатный урок, коротко и ясно.
    Ответ написан
    Комментировать
  • CoroutineScope(Dispatchers.Main).launch{} vs CoroutineScope(Dispatchers.Main).launch(DispathersMain){}?

    @foonfyrick Автор вопроса
    Ответ на первый вопрос нашел, контекст можно комбинровать вместе с именем через +
    val scope1 = CoroutineScope(CoroutineName("MyCoroutine")+Dispatchers.IO)

    два других под-вопроса пока что остаются не решенными
    Ответ написан
  • Wrong number of arguments, параметризованный тест junit, что не так?

    @foonfyrick Автор вопроса
    нужно заменить fun arrays()= listOf(listOf(listOf(1,2,3,4,5,6,7,8,9),3, listOf(4,6,8))) на fun arrays()= arrayOf(listOf(listOf(1,2,3,4,5,6,7,8,9),3, listOf(4,6,8)))
    Ответ написан
    Комментировать
  • Можно ли сделать переменную a, чтобы при b=a, a=null?

    @foonfyrick Автор вопроса
    нет
    Ответ написан
    Комментировать
  • Как вывести 2 значения из функции?

    @foonfyrick
    Либо класс данных возвращай либо пару значений Pair
    Ответ написан
    Комментировать