Witam wszystkich.
Aktualnie jestem na etapie nauki podstaw javy i wczoraj napotkałem błąd w moim prostym programie. Jednak po 30 min udało mi się go wyeliminować.
Jednak chciałbym z ciekawości dowiedzieć się dlaczego taki błąd się pojawia.
(Na wstępie uprzedzam że to mój pierwszy post, więc zapewne będzie mało "profesjonalny ;) )
Sytuacja wygląda następująco. (Dla pokazania błędu napisałem najprostszy przykład)
import java.util.Scanner;
public class Test {
public static void exampleA()
{
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
}
public static void exampleB()
{
Scanner skan = new Scanner(System.in);
String s = skan.nextLine();
}
public static void exampleC()
{
Scanner sk = new Scanner(System.in);
String s = sk.nextLine();
sk.close();
}
public static void exampleD()
{
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
}
Teraz wywołując w funkcji main funkcje exampleC() i exampleD() (jak poniżej)
public static void main(String[] args) {
exampleC();
exampleD();
}
}
pojawi się następujący błąd podczas wykonywania programu
"Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at Test.exampleD(Test.java:29)
at Test.main(Test.java:37)"
...
Natomiast jeśli wywołamy w funkcji main funkcję exampleA() i exampleB() (jak poniżej) program wykona się prawidłowo
public static void main(String[] args) {
exampleA();
exampleB();
}
}
Teraz moje pytanie. Dlaczego tak się dzieje? Kompilator sam informuje mnie żebym zamknął obiekt Scanner po użyciu. A gdy go zamknę tak jak prosi (exampleC() i exampleD() ) to wtedy jednak program napotyka błąd podczas wykonywania.
Mógłby mi ktoś powiedzieć dlaczego?
(nie wiem czy dobrze opisałem o co mi chodzi ale z góry dzięki za odp)