ArithmeticException bei testEvaluateWithSwap

Schnell
Nichts ist wie es scheint
Beiträge: 23
Registriert: 11. Feb 2010 22:27

ArithmeticException bei testEvaluateWithSwap

Beitrag von Schnell »

Hi,
ich kriege eine ArithmeticException beim diesem Test. In P1 liefen alle Tests durch deswegen bin ich hier etwas verwirrt und verstehe die Exception nicht.
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(Unknown Source) [...]

Ich habe ein paar sysouts eingebaut um zu schauen ob an der Liste etwas falsch ist oder die Operation mit falschen elementen aufgerufen wird, aber das scheint nicht der Fall zu sein.
Die Liste sieht vorher so aus:
18|#|/|5

Dann führt er swap aus:
Swapping 18 with 5

Und dann die Division die den Fehler ausspuckt:
LeftOperand 5 RightOperand 18

Woran liegt es?
Edit: mir ist bewusst dass 5/18 eine periode enthält, ich dachte BigDecimal hätte damit keine Probleme. Aber was ist dann an meiner Lösung falsch.

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: ArithmeticException bei testEvaluateWithSwap

Beitrag von Bug »

BigDecimal kann keine periodischen Daten darstellen, deshalb wird diese Exception geworfen. Die Behandlung solcher Fälle ist aber ja explizit nicht nötig.

Das Problem in diesem Fall ist aber, dass deine Auswertung leider nicht korrekte Zwischenergebnisse liefert, wodurch dieser Fall erst eintritt. Das passiert aber nur, wenn nicht die Priorität der Swap-Operationen beachtet wird. :wink:

Ich vermute stark, dass du schon Zwischenergebnisse durch Auswertung der anderen Operatoren ermittelst, während in der Simple Expression noch Swap-Operatoren enthaöten sind. Dadurch kommen natürlich andere Ergebnisse zustande, die in diesem Fall eben die Periode verursachen.

Die Swap-Operation hat, wie in der Aufgabenstellung beschrieben, eine größere Priorität als alle anderen Operationen. Untereinander gibt es keinen Unterschied, ein Swap vor einen * ist also genauso viel Wert wie eins vor einem +, es wird von links nach rechts ausgewertet.
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Antworten

Zurück zu „Archiv“