Erste Schritte java.lang.StringIndexOutOfBoundsException

Flowertime

Mitglied
Hallo Leute, ich hab ein kleines Verständnis Problem bei meinem Code.
Ich soll zahlen übergeben und diese je nach dem ob + oder minus eingeben wird subtrahieren oder addieren. Es hat geklappt nur wenn ich die Zeile mit
String line = scanner.nextLine();
char c = line.charAt(0);
nicht direkt nach dem scanner platziere bekomm ich eine Fehler Meldung. Eine OutofBounds exception. Wenn ich es direkt nach dem Scanner setze funktioniert alles. Wieso?
Code:
import java.util.Scanner;
public class EinfacherRechner {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Geben sie die Anzahl der Zahlen ein:  ");
        int zahl = scanner.nextInt();
        int[] zahlen= new int[zahl];
        int rechner = 0;
        System.out.println("Geben sie an  ob die Zahlen subtrahiert - oder addiert + werden sollen ");
        String line = scanner.nextLine();
        char c = line.charAt(0);
        for(int i = 0; i < zahl; i++)
        {
        zahlen[I] = scanner.nextInt(); 
        }
        for(int s = 0; s <zahl; s++)
        {
            if(c == '+')
            {
                rechner = rechner +zahlen[S];
            }
        else if( c == '-')
        {
            rechner = rechner-zahlen[S];
        }
    }
        System.out.println(rechner);
    }
}
 
Zuletzt bearbeitet:
Du hast die Code-Tags verwechselt. Und zur Frage: Weil String zwischenzeitlich geändert wird. Beste Grüße.
 
Angenommen du gibst bei der ersten Eingabe "2" ein und drückst dann Enter.

Im Inputbuffer steht dann sowas:
[2][\n]
Mit
Java:
scanner.nextInt()
liest du den nächsten Integer aus. Also wird die "2" gelesen. Der Zeilenumbruch "\n" wird aber nicht gelesen. Und steht also noch im Buffer: [\n]

Beim nächsten Aufruf von
Java:
scanner.nextLine()
wird also nur der Zeilenumbruch eingelesen und es kommt zu der Exception in der nächsten Zeile.

Deswegen lieber nach dem Einlesen des ersten ints, den Zeilenumbruch "konsumieren":
Java:
Scanner scanner = new Scanner(System.in);
System.out.println("Geben sie die Anzahl der Zahlen ein:  ");
int zahl = scanner.nextInt();
scanner.nextLine();
//...
 

Neue Themen


Zurück
Oben