Hallo ich bin grade dabei einen Taschenrechner mit PvS Rechnung zu coden.
Kann mir irgendjmd sagen wo mein Fehler liegt?
Exception:
Mein Java code:
Kann mir irgendjmd sagen wo mein Fehler liegt?
Exception:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:403)
at java.util.ArrayList.get(ArrayList.java:416)
at MainClass4.main(MainClass4.java:43)
Mein Java code:
Java:
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
public class MainClass4 {
private static double ergebnis;
private static String zahl1;
private static String zahl2;
private static String rechenzeichen;
static double zahl;
static ArrayList<String> tkList;
static String rechnung;
static ArrayList<String> tkList2;
static String zeichen;
static String zahlen;
public static void tokenizer2() {
StringTokenizer st = new StringTokenizer(rechnung, "+-*/");
tkList2 = new ArrayList<String>();
while (st.hasMoreTokens()) {
tkList2.add(st.nextToken().toString());
}
}
public static void tokenizer1() {
StringTokenizer st = new StringTokenizer(rechnung, "0-9");
tkList = new ArrayList<String>();
while (st.hasMoreTokens()) {
tkList.add(st.nextToken().toString());
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Bitte geben Sie Ihre Rechnung ein:");
rechnung = sc.next();
tokenizer1();
tokenizer2();
while (tkList2.size() != 1) {
int stelle = suchmethode();
zahl1 = tkList2.get(stelle);
zahl2 = tkList2.get(stelle +1);
rechenzeichen = tkList.get(stelle);
ergebnis = rechnung1(zahl1, rechenzeichen, zahl2);
String ergebnisstring = Double.toString(ergebnis);
tkList2.set(stelle, ergebnisstring);
tkList2.remove(stelle +1);
}
}
// public static void rechenmethode() {
//
// }
public static int suchmethode() {
for (int i = 0; i < tkList.size(); i++) {
if (istPunktzeichen(tkList.get(i))) {
return i;
}
}
for (int i = 0; i < tkList.size(); i++) {
if (istStrichzeichen(tkList.get(i))) {
return i;
}
}
return -1;
}
static boolean istPunktzeichen(String string) {
switch (string) {
case "*":
return true;
case "/":
return true;
default:
return false;
}
}
static boolean istStrichzeichen(String string) {
switch (string) {
case "+":
return true;
case "-":
return true;
default:
return false;
}
}
public static double rechnung1(String zahl1, String rechenzeichen,
String zahl2) {
double z1, z2;
z1 = Double.parseDouble(zahl1);
z2 = Double.parseDouble(zahl2);
switch (rechenzeichen) {
case "+":
return z1 + z2;
case "-":
return z1 - z2;
case "*":
return z1 * z2;
case "/":
return z1 / z2;
default:
return 0;
}
}
}