# Mehrfachverwendung Scanner



## Alina_C (13. Dez 2012)

Hallo, 

das folgende "Programm" soll ein Array mittels Benutzereingabe erstellen, Werte der Reihe nach einlesen, und anschließend wieder ausgeben.


```
public class ArrayTest {
    public static void main (String[] args){
        Scanner scanner1 = new Scanner(System.in);
        System.out.print("array length: ");
        int x = scanner1.nextInt();
        String[] stringArray = new String[x];
        
        for(int i = 0; i < stringArray.length; i++){
            stringArray[i] = scanner1.nextLine();
        }
        
        for(String s : stringArray){
            System.out.println(s);
        }
        scanner1.close();
    }
}
```

Beispielsweise kommt dieser Ablauf zustande:

```
run:
array length: 3
abc
def

abc
def
BUILD SUCCESSFUL (total time: 17 seconds)
```

Es wird also ein Array mit der Komponentenanzahl 3 erstellt,
ich komme jedoch garnicht erst dazu drei Werte einzugeben - stattdessen wird ein leerer Zeilenumbruch eingefügt.


Erstelle ich zwei Scanner-Objekte zur getrennten Eingabe der Länge und der Werte, funktioniert das ganze.

```
public class ArrayTest {
    public static void main (String[] args){
        Scanner scanner1 = new Scanner(System.in);
        System.out.print("array length: ");
        int x = scanner1.nextInt();
        String[] stringArray = new String[x];
        
        Scanner scanner2 = new Scanner(System.in);
        for(int i = 0; i < stringArray.length; i++){
            stringArray[i] = scanner2.nextLine();
        }
        
        for(String s : stringArray){
            System.out.println(s);
        }
        scanner1.close();
        scanner2.close();
    }
}
```


```
run:
array length: 3
abc
def
ghi
abc
def
ghi
BUILD SUCCESSFUL (total time: 9 seconds)
```

Muss ich also für jede Lese-Operation ein eigenes Scanner-Objekt erzeugen oder kann man alte Objekte doch irgendwie recyclen?
Ich habe zwar die Methode reset() gesehen, aber die hat anscheinend eine andere Funktion (determiner).


----------



## TKausL (13. Dez 2012)

Hallo,

Dein Problem ist, dass 
	
	
	
	





```
scanner1.nextInt();
```
 NUR den Int einließt, den Zeilenumbruch aber da lässt wo er ist.
Dein Lesezeiger befindet sich nach dem lesen also NACH dem Int allerdings in der gleichen Zeile noch.
Du musst NACH dem int nochmal eine Zeile einlesen und verwerfen, um in die nächste Zeile zu kommen.


```
public class ArrayTest {
    public static void main (String[] args){
        Scanner scanner1 = new Scanner(System.in);
        System.out.print("array length: ");
        int x = scanner1.nextInt();
        scanner1.nextLine(); //Zeile einlesen und einfach verwerfen / nicht speichern.
        String[] stringArray = new String[x];
        
        Scanner scanner2 = new Scanner(System.in);
        for(int i = 0; i < stringArray.length; i++){
            stringArray[i] = scanner2.nextLine();
        }
        
        for(String s : stringArray){
            System.out.println(s);
        }
        scanner1.close();
        scanner2.close();
    }
}
```


----------



## Alina_C (13. Dez 2012)

Das ging aber schnell, vielen Dank


----------

