Исключение NoSuchElementException java.lang.Сканер

#kotlin

#котлин

Вопрос:

Я понятия не имею, в чем ошибка, мне трудно адаптироваться к этому языку, большое вам спасибо за любую помощь.

Ошибка:

 Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Packing.<init>(Packing.kt:100)
    at PackingKt.main(Packing.kt:7)
    at PackingKt.main(Packing.kt)
  

Мой код:

 import java.io.InputStream
import java.util.Scanner

fun main() {
    val input = Scanner(InputStream.nullInputStream())

    val packing1 = Packing(input)
    val packing2 = Packing(input)
    val packing3 = Packing(input)

    var total = 0
    var min = 0
    val combinations = ArrayList<String>()

    for(a in 1..3){
        for(b in 1..3){
            for(c in 1..3){
                //here is a piece of code
            }
        }

        combinations.sort()
        println("${combinations.get(0)} $min")
    }
}

class Packing {

    var brownBottles = 0
    var greenBottles = 0
    var clearBottles = 0

    constructor (input : Scanner){
        brownBottles = input.nextInt() //this is the line 100
        greenBottles = input.nextInt()
        clearBottles = input.nextInt()
    }
}
  

Идея состоит в том, чтобы вводить значения с помощью консоли, которые инициализируют переменные моих объектов.

Комментарии:

1. почему вы переходите InputStream.nullInputStream() к Scanner ? Может быть, вам нужно Scanner(System.`in`) ?

2. Я пытался с System.in но я получил ошибку, я попробую с этим

Ответ №1:

Я бы просто использовал

 val input = Scanner(System.`in`)
  

Если вы введете 9 целых чисел в консоль, инициализация объектов упаковки должна сработать.
nullInputStream() для меня не имеет смысла. С этим невозможно читать с консоли.

Список комбинаций пуст, поэтому он выдает исключение, обращающееся к нему здесь

 println("${combinations.get(0)} $min")