Zum Inhalt springen

Burdy

Mitglieder
  • Gesamte Inhalte

    2
  • Benutzer seit

  • Letzter Besuch

  1. Ok. Danke. Werd ich das * mal zu einem x ändern.
  2. Hallo Ich möchte einen Stapelrechner für die UPN schreiben (also sowas wie 5 3 - = -2) Das sieht zur Zeit so aus: (LinkedListSTack ist eine Stapelliste) public class IntRechner { /** Nimmt die beiden obersten Zahlen vom Stapel und rechnet mit ihnen gemäß 'operator' und legt das Ergebnis auf den Stapel zurück * @param ll ein LinkedListStack, von dem die Zahlen genommen werden * @param operator der Operator, der auf die Zahlen angewendet wird */ public static void Rechner(LinkedListStack ll, char operator) { int a = 0, b = 0; try { a = (Integer) ll.top(); ll.pop(); b = (Integer) ll.top(); ll.pop(); } catch (StackException e) { // Leerer-Stapel-Fehler abfangen System.out.println("Kein gültiger Aufruf mit UPN! Bitte Argumente prüfen."); System.exit(0); } switch (operator) { // Ergebnis abhängig vom Operator bestimmen und zurück auf den Stapel legen case '+': ll.push(a+; break; case '-': ll.push(a-; break; case '*': ll.push(a*; break; case '/': try { // Division durch 0 abfangen ll.push(a/b); } catch (ArithmeticException e) { System.out.println("Division durch 0!"); System.exit(0); } break; case '%': ll.push(a%; break; default: // operator ist kein gültiger Operator System.out.println("'" + operator + "' ist ein ungültiger Operator. Nur +, -, *, /, % sind erlaubt. Abbruch!"); System.exit(0); } } /** Liest die Zahlen und Operatoren in UPN, mit der IntRechner aufgerufen wurde und berechnet das Ergebnis */ public static void main(String[] args) { if (args.length == 0) { // Auruf ohne Argumente abfangen System.out.println("Aufruf mit 'Intrechner zahl zahl operand' (UPN)"); System.exit(0); } int i = 0; LinkedListStack<Integer> ll = new LinkedListStack<Integer>(); System.out.println(args.length); while (i < args.length) { try { ll.push(Integer.parseInt(args[i])); // Aufruf-Argumente werden von String in Int umgewandelt } catch (NumberFormatException n) { // Argument kein String -> Operator if (args[i].length() != 1) { System.out.println(args[i]+" ist weder Zahl noch Operand, abbruch"); System.exit(1); } char operator = args[i].charAt(0); Rechner(ll, operator); // Operator anwenden } i++; } if (ll.size() != 1) { // Stapel ist nach Abschluss aller Operationen leer oder es liegen noch mehr Zahlen, als das Endergebnis auf ihm System.out.println("Kein gültiger Aufruf, auf dem Stapel liegt nicht nur noch das Ergebnis (" + ll +")"); } else { try { System.out.println("Das ergebnis ist " + ll.top()); } catch (StackException e) { } } } }[/code] Das funktioniert so weit. Aufruf unter Linux mit zB "java IntRechner 5 4 -" gibt "-1" aus. Addition geht, Subtraktion geht, Division auch. Aber wenn ich "5 4 *" eingebe, kommt es zu einem Fehler. Den Grund hab ich schon herausgefunden. Wenn ich ein '*' verwende, ist die Länge vom String-Feld "args" bei "5 4 *" nicht 3, sondern 16. Es werden alle Dateien in dem Ordner, in dem IntRechner liegt als Argument mitübergeben und es kommt zu einem Fehler, weil dann in "args" Strings stehen, die weder Zahl noch Operator sind. Kann mir jemand sagen, wieso bei Stern '*' die Dateien im Ordern mitübergeben werden als Argumente und wie ich das verhindern kann?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...