Проблема с печатью целых чисел из отсортированного набора в Scala - PullRequest
0 голосов
/ 17 января 2020

Для начала, я новичок в Scala и использую этот язык в течение нескольких дней. Для класса я пытаюсь напечатать отсортированный набор целых чисел на консоли, но по какой-то причине они продолжают печатать с «D» в конце первого целого числа di-10 git при первом выводе l oop .

def getInputNumbers: (Boolean, SortedSet[Int]) {
  var setOfInts: SortedSet[Int] = SortedSet()
    var repeats = false
    var input = readLine()

    while(input != null) {
      try {
        val intInput = input.toInt
        if(setOfInts.contains(intInput)) repeats = true
        else setOfInts = setOfInts + intInput
      } catch {
        case e : java.lang.NumberFormatException => {
          println("ERROR")

          // Kill the program if there's an error with the input
          sys.exit(0)
        }
      }
      input = readLine()
    }
    (repeats, setOfInts)
}

val results = getInputNumbers
results._2.foreach(println(_))
if(results._1) println("REPEATS") else println("NO REPEATS")

Предполагая, что отсортированный набор содержит {1, 2, 3, 4}, вывод является следующим:

1D
2
3
4

Но когда отсортированный набор содержит {10, 11, 12}, вывод является следующим:

10
11
12

по желанию.

Другая интересная вещь, которая происходит, заключается в том, что при изменении кода на следующее:

def getInputNumbers(): (Boolean, SortedSet[Integer]) { ... }

val results = getInputNumbers
results._2.foreach(println(_))
results._2.foreach(println(_))

и отсортированный набор содержит {1, 2, 3, 4} следующий результат:

1D
2
3
4
1
2
3
4

, который не согласуется с исходным оператором печати. ​​

Похоже, что функция println() преобразует первое целое число в двойное, но это может быть не так. Я также искал по всему inte rnet и не могу найти никаких обсуждений по этому вопросу. Любые идеи о том, как заставить это работать как задумано?

1 Ответ

0 голосов
/ 17 января 2020

Оказывается, это была проблема с тем, как вещи печатались. Моя консоль печатала ^D при вводе Ctrl-D, чтобы указать EOF. При работе на другой машине все работало как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...