Java Java Scanner macht nicht das was er soll

Brauno

Cadet 2nd Year
Registriert
Juni 2018
Beiträge
28
Hallo, ich habe ein Problem mit dem Scanner. Undzwar bleibt er immer "hängen" und das Programm stopt ander der Stelle:
ein.add(Integer.parseInt(sc2.next()));
Die Methode soll aus einer Linie verschiedene Ints auslesen und diese als Array ausgeben. Bei falscher Eingabe soll die Methode noch
einmal ausgeführt werden

Der gesamte Code:


import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class test {
//Aufruf der Methode
public static void main(String[]args) {
int[] array = ScanNext("eingabe: ");
for(int i = 0; i < array[0]; i++) {
System.out.println(array);
}
}
public static int[] ScanNext(String out) {
//Variablen
System.out.println(out);
Scanner sc2 = new Scanner(System.in).useDelimiter("\\,");
ArrayList<Integer> ein = new ArrayList<Integer>();
//Eingabe
while (sc2.hasNext()) {
try {
ein.add(Integer.parseInt(sc2.next()));
}catch(InputMismatchException e) { //falsche Eingabe
return ScanNext("Gebe die Sitzplatznummern bitte so ein: x, x2, ..., xn |: ");
}catch(NumberFormatException e) {
return ScanNext("Gebe die Sitzplatznummern bitte so ein: x, x2, ..., xn |: ");
}
}
sc2.close();
//Kovertierung von Arraylist to Array
int[] outA = new int[ein.size()];
for(int g = 0; g < ein.size(); g++) {
outA[g] = ein.get(g);
}
return outA;

}
}

Bin noch nicht lange bei java unterwegs, vllt bin ich auch einfach nur blind.
 
Allgemein noch nicht lange beim Programmieren unterwegs? ;)

Ad 1, Codetags. Use 'em. Ich hab das mal entsprechend aufbereitet, bin aber 99.9% sicher, daß das so nicht wie ursprünglich geschrieben ist --- mal normal, mal italic suggeriert, daß da irgendwo "*" dazwischen waren.

Oder bbcode-Tags, wie eckige Klammer auf, Buchstabe, eckige Klammer zu. Offensichtlich kommen da schwerwiegende Probleme bei rum.
Java:
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class test {
//Aufruf der Methode
public static void main(String[]args) {
int[] array = ScanNext("eingabe: ");
for(int i = 0; i < array[0]; i++) {
System.out.println(array);
}
}
public static int[] ScanNext(String out) {
//Variablen
System.out.println(out);
Scanner sc2 = new Scanner(System.in).useDelimiter("\\,");
ArrayList<Integer> ein = new ArrayList<Integer>();
//Eingabe
while (sc2.hasNext()) {
try {
ein.add(Integer.parseInt(sc2.next()));
}catch(InputMismatchException e) { //falsche Eingabe
return ScanNext("Gebe die Sitzplatznummern bitte so ein: x, x2, ..., xn |: ");
}catch(NumberFormatException e) {
return ScanNext("Gebe die Sitzplatznummern bitte so ein: x, x2, ..., xn |: ");
}
}
sc2.close();
//Kovertierung von Arraylist to Array
int[] outA = new int[ein.size()];
for(int g = 0; g < ein.size(); g++) {
outA[g] = ein.get(g);
}
return outA;

Nächstens, bevor Du anfängst, try/catch zu basteln, sorg erst dafür, daß der Code richtig läuft.
Try/Catch ist exakt das Problem hier. Eine Ausnahme wird geworfen und weil es die Ausnahme gibt, wird rekursiv die Methode neugestartet... die wieder die Ausnahme generiert... die wieder neustartet... etc etc bis der Stack voll ist.


Schau Dir auch mal die Schleife in der main-Methode an. Die kann so nicht funktionieren.
 
Jap, in der while Schleife solltest du schon davon ausgehen dass eine Eingabe in der Form
x, x2, ..., xn
wohl spaetestens beim Komma eine Exception wirft. hasNextInt() nutzen gefolgt von nextInt() wuerde helfen, sonst next() aufrufen um ein Token weiterzugehen.
 
Danke! ich konnte das Problem irgenwie lösen =)
Doch wenn ich sc.nextInt() aufrufe, muss dann nicht eine weitere Eingabe gemacht werden?
 
Zurück
Oben