I have to make a simple calculator that asks for a valid operator and stops when the operator is an 'S' character. It then asks for 2 numbers to calculate. The first time calculating it works without any errors, but once it tries to ask for the next operator I get the following error:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(String.java:658) at Main.main(Main.java:16)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean geldigeOperator;
double getal1;
double getal2;
char operator;
do {
System.out.print("Operator (S = stoppen): ");
String s = input.nextLine();
//pakt het eerste character van de string die is ingevoerd door de gebruiker
operator = s.charAt(0);
geldigeOperator = isGeldigeOperator(operator);
if (!geldigeOperator) {
System.out.println("Operator is ongeldig");
System.out.println("");
} else {
System.out.print("Eerste getal: ");
getal1 = input.nextDouble();
System.out.print("Tweede getal: ");
getal2 = input.nextDouble();
printBerekening(operator, getal1, getal2);
System.out.println();
}
} while (!(operator == 'S'));
}
public static boolean isGeldigeOperator(char karakter) {
if (karakter == '+' || karakter == '-' || karakter == '*' || karakter == '/' || karakter == '%') {
return true;
} else {
return false;
}
}
public static void printBerekening(char operator, double getal1, double getal2) {
double result = 0;
switch(operator) {
case '+':
result = getal1 + getal2;
System.out.println(getal1 + " + " + getal2 + " = " + result);
break;
case '-':
result = getal1 - getal2;
System.out.println(getal1 + " - " + getal2 + " = " + result);
break;
case '*':
result = getal1 * getal2;
System.out.println(getal1 + " * " + getal2 + " = " + result);
break;
case '/':
result = getal1 / getal2;
System.out.println(getal1 + " / " + getal2 + " = " + result);
break;
case '%':
result = getal1 % getal2;
System.out.println(getal1 + " % " + getal2 + " = " + result);
break;
}
}
}
The working code should give the following results: