Как правильно сохранить отладку println?

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

Я предлагаю создать файл отладки и чистый файл и просто сохранить оба. Есть ли у кого-нибудь еще хорошая идея для этого? В качестве примера, вот моя почти законченная программа scala для решения проблемы «Шерлок и действительная строка» на Hackerrank глянь сюда.

import java.io.PrintWriter
import scala.collection.mutable.ListBuffer
import scala.collection.mutable.{Set => MutSet}
import scala.collection.mutable.{Map => MutableMap}
import scala.collection.mutable.{ListBuffer}


object Solution {

    /**
        @TODO  "Sherlock and the Valid String", Strings
    */


    // Complete the isValid function below.
    def isValid(s: String): String = {
        // Count frequencies
        var freqmap = Map[Char, Int]()
        var old = 0
        for (c <- s) {
            old = freqmap.getOrElse(c, 0) + 1
            freqmap = freqmap + (c -> old)
        }
        println(s"Counts of characters in string:\n" + freqmap.mkString(", \n"))

        // Check if problems or okay
        var oneDeviation = false
        var initFreq = freqmap(s(0))
        val allowedFreqs = ListBuffer(initFreq)
        val counter = MutableMap[Int, Int](initFreq -> 1)
        var isFreqOne = false
        var freqThatIsOne: FreqIsOne = None

        println(s"Init freq: $initFreq")
        println(s"counter: " + counter.mkString(", \n"))
        println()
        for (freq <- freqmap.values) {
            println("------------------")
            println(s"Freq: $freq")

            if (!oneDeviation) {
                if (freq != initFreq) {
                    oneDeviation = true
                    // greater than 1 diff and no freq is 1 , eg 2 and 4
                    // if pass this we know diff is 1
                    if (isBiggerThanOneDiffAndNoOneFreq(initFreq, freq)) {
                        return "NO"
                    }
                    // check if we have a freq that is one
                    if (initFreq == 1 || freq == 1) {
                        // one freq which is 1
                        if (initFreq == 1) {
                            isFreqOne = true
                            freqThatIsOne = Init
                            // only freq allowed
                            allowedFreqs.remove(0)
                            allowedFreqs += freq
                        } else if (freq == 1) {
                            isFreqOne = true
                            freqThatIsOne = Freq
                            // only allowed is initFreq
                        }
                    // one diff but larger than 1 freqs, only allowed
                    // is the lower frequency
                    } else {
                        if (freq > initFreq) {
                            allowedFreqs.remove(0)
                            allowedFreqs += freq
                        }
                    }

                // no new freq
                } else {

                }
            } else {
                if (!allowedFreqs.contains(freq)) return "NO"
            }
            old = counter(initFreq)
            counter(initFreq) = old + 1
            println(s"counter: " + counter.mkString(", "))
        }
        "YES"
    }

    def isBiggerThanOneDiffAndNoOneFreq(initFreq: Int, freq: Int): Boolean = {
        math.abs(freq - initFreq) > 1 && (initFreq != 1 && freq != 1)
    }

    sealed trait FreqIsOne
    case object Init extends FreqIsOne
    case object Freq extends FreqIsOne
    case object None extends FreqIsOne

    def main(args: Array[String]) {
        val stdin = scala.io.StdIn


        val s = stdin.readLine

        val result = isValid(s)
        println(result)

    }
}

почему бы не использовать библиотеку журналирования, такую ​​как Apache Log4j 2

fantaghirocco 09.04.2021 16:15

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

Luis Miguel Mejía Suárez 09.04.2021 17:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
31
1

Ответы 1

Используйте структуру ведения журнала, которая позволяет контролировать уровень журнала для каждого компонента (например, scala-logging), и оставьте там код отладки на тот случай, если он вам снова понадобится.

Хорошо! Благодарю вас <3

Oliver Persson 09.04.2021 17:44

Другие вопросы по теме