Hallo zusammen!
Durch eine ausgiebige Google-Suche habe ich rausgefunden, dass mein Problem kein Einzelfall ist, aber leider bin ich auch auf Seite 2 und 3 von Google (!!!) nicht fündig geworden.
Folgendes: Mein Code bzw meine Methode liest einen String ein, teilt ihn in Tokens und überprüft, ob es sich um Zahlen handelt, falls ja, werden die auf einen Stack gelegt, falls nicht, wird was anderen gemacht (andere Methoden werden aufgerufen).
Mein Code sieht momentan wie folgt aus:
Wenn ich keine der beiden if-Abfragen mache, wird mein Stack mit den Strings gefüllt. Da aber nachher noch weitere Zeichen hinzukommen, wie !, . /, etc, ist das eher semi hilfreich,
Ich habe ursprünglich mit Abfrage 2 und einem zusätzlichen Array gearbeitet und dann auf 1 gewechselt und versuche es jetzt ohne Array und nur mit StringTokenizer.
Wenn ich kein "break;" benutze, kriege ich eine "NoSuchElementException" geworfen. Wenn ich eine der beiden oder gar beide "break;"s verwende, kriege ich zwar keine Exception, aber mir wird der Stack nur mit meinem ersten Element ausgegeben, hier wäre das also [1].
Erkennt vielleicht jemand den Fehler oder das Problem ?
Durch eine ausgiebige Google-Suche habe ich rausgefunden, dass mein Problem kein Einzelfall ist, aber leider bin ich auch auf Seite 2 und 3 von Google (!!!) nicht fündig geworden.
Folgendes: Mein Code bzw meine Methode liest einen String ein, teilt ihn in Tokens und überprüft, ob es sich um Zahlen handelt, falls ja, werden die auf einen Stack gelegt, falls nicht, wird was anderen gemacht (andere Methoden werden aufgerufen).
Mein Code sieht momentan wie folgt aus:
Java:
String rechnung = "1 2 3 4 5 6";
Stack <BigDecimal> zahlen = new Stack <BigDecimal>();
StringTokenizer aufgabe = new StringTokenizer(rechnung);
while(aufgabe.hasMoreTokens()) {
// (1)if (isNumeric(aufgabe.nextToken())) {
if((aufgabe.nextToken()).matches("-?\\d+(\\.\\d+)?")) { //(2)
BigDecimal ziffer = new BigDecimal(aufgabe.nextToken());
zahlen.push(ziffer);
//break;
}
//break;
//weiterer code hier
}
System.out.println(zahlen);
public static boolean isNumeric(String s) {
try {
int i = Integer.parseInt(s);
} catch(NumberFormatException | NullPointerException ex) {
return false;
}
try {
double d = Double.parseDouble(s);
} catch(NumberFormatException | NullPointerException ex) {
return false;
}
try {
float f = Float.parseFloat(s);
} catch(NumberFormatException | NullPointerException ex) {
return false;
}
try {
long l = Long.parseLong(s);
} catch(NumberFormatException | NullPointerException ex) {
return false;
}
return true;
}
Wenn ich keine der beiden if-Abfragen mache, wird mein Stack mit den Strings gefüllt. Da aber nachher noch weitere Zeichen hinzukommen, wie !, . /, etc, ist das eher semi hilfreich,
Ich habe ursprünglich mit Abfrage 2 und einem zusätzlichen Array gearbeitet und dann auf 1 gewechselt und versuche es jetzt ohne Array und nur mit StringTokenizer.
Wenn ich kein "break;" benutze, kriege ich eine "NoSuchElementException" geworfen. Wenn ich eine der beiden oder gar beide "break;"s verwende, kriege ich zwar keine Exception, aber mir wird der Stack nur mit meinem ersten Element ausgegeben, hier wäre das also [1].
Erkennt vielleicht jemand den Fehler oder das Problem ?