✗ BAD — Avoid This
Code
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = getName(); // no Scanner passed!
int age = getAge(); // no Scanner passed!
System.out.println("Hello " + name + ", age " + age);
}
public static String getName() {
Scanner scanner = new Scanner(System.in); // NEW Scanner!
System.out.println("Enter name: ");
return scanner.nextLine();
}
public static int getAge() {
Scanner scanner = new Scanner(System.in); // ANOTHER new Scanner!
System.out.println("Enter age: ");
return scanner.nextInt();
}- Creates 3 separate Scanner objects all reading from the same
System.in - Wasteful — only one stream, so multiple Scanners fight over it
- Can cause mysterious bugs: data consumed by one Scanner is gone for others
How It Looks at Runtime
main()
↓
Scanner #1
new Scanner(System.in)
new Scanner(System.in)
getName()
→
Scanner #2
new Scanner(System.in)
new Scanner(System.in)
getAge()
→
Scanner #3
new Scanner(System.in)
new Scanner(System.in)
↓
↓
↓
System.in (single stream)
Three Scanners all competing for one input stream