Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi,
jedes Mal, wenn ich etwas ausrechnen will, kommt eine ClassCastException. Das kommt doch immer, wenn Objekte nicht zueinander kompatibel sind. Hab aber keine Ahnung, warum das auftaucht:
Code:
public void berechnen()
{
String get= tfEingabe.getText();
StringBuffer form= new StringBuffer();
ArrayList al= new ArrayList();
int rechnung= 0;
//Alle Zeichen die Zahlen sind in einen StringBuffer schreiben
for(short i=0; i<get.length(); i++){
if (get.charAt(i) >= '0' && get.charAt(i) <= '9')
form.append(tfEingabe.getText().charAt(i));
//Die Zahlen in einem ArrayList speichern
if (get.charAt(i) == '+'){
al.add(form);
form.setLength(0); //StringBuffer wieder leeren
}
if(get.charAt(i) == '-'){
al.add(form);
form.setLength(0);
}
if(get.charAt(i) == '/'){
al.add(form);
form.setLength(0);
}
if(get.charAt(i) == '*'){
al.add(form);
form.setLength(0);
}
}
Iterator itr= al.iterator();
//Erneut (+, -, /, *) auslesen, damit man rechnen kann
for(short i=0; i<get.length(); i++){
rechnung= ((Integer) itr.next()).intValue();
if (get.charAt(i) == '+'){
rechnung += ((Integer) itr.next()).intValue();
}
if (get.charAt(i) == '-'){
rechnung -= ((Integer) itr.next()).intValue();
}
if (get.charAt(i) == '/'){
rechnung /= ((Integer) itr.next()).intValue();
}
}
tfEingabe.setText(Integer.toString(rechnung));
}
Hi,
ich hatte vorher das mit form.toString() in String umgewandelt, aber es kam dieselbe Fehlermeldung.
Dann habe ich mir gedacht, dass ich das casten gleich lassen kann, da es sowieso nur Speicher und Rechenkapazität fordert.
Also daran liegt es nicht.
Hi,
stimmt da hast du Recht! Hab es mit new Integer und form.toString() gecastet.
Aber jetzt kommt eine NoSuchElementException
java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:426)
at Taschenrechner.berechnen(Taschenrechner.java:61)
at Taschenrechner.actionPerformed(Taschenrechner.java:85)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Ohne Deinen Code jetzt genauer analysiert zu haben, deutet der Fehler darauf hin, daß Du vom Iterator ein Element mit next() holen willst, es jedoch kein weites Element gibt (hasNext()==false)
Iterator itr= al.iterator();
rechnung= ((Integer) itr.next()).intValue();
//Erneut (+, -, /, *) auslesen, damit man rechnen kann
for(short i=0; i<get.length(); i++){
if (get.charAt(i) == '+' && itr.hasNext()){
rechnung += ((Integer) itr.next()).intValue();
}
if (get.charAt(i) == '-' && itr.hasNext()){
rechnung -= ((Integer) itr.next()).intValue();
}
if (get.charAt(i) == '/' && itr.hasNext()){
rechnung /= ((Integer) itr.next()).intValue();
}
Das Problem ist, dass weder addiert noch subtrahiert, noch mulitpliziert, noch geteilt wird. Es wird immer die erste Zahl angezeigt.
Also bei 6+8, kommt 6 raus.
es sind ein paar Fehler in deinem Code... du vergisst z.b. das letzte Zeichen einzulesen....
Du brauchst nämlich keinen Iterator (wenn du schon ArrayList verwendest würde ich auch auf RandomAccess zurückgreifen !)
hier eine andere Möglichkeit für dein problem
Code:
public void berechnen() {
String get = "6+8/2-7";
StringBuffer form = new StringBuffer();
ArrayList numbers = new ArrayList();
ArrayList operators = new ArrayList();
//Alle Zeichen die Zahlen sind in einen StringBuffer schreiben
for (short i = 0; i < get.length(); i++) {
if (get.charAt(i) >= '0' && get.charAt(i) <= '9') {
form.append(get.charAt(i));
}
else {
numbers.add(new Integer(form.toString()));
operators.add(new Character(get.charAt(i)));
form.setLength(0);
}
}
numbers.add(new Integer(form.toString()));
int result = ((Integer)numbers.get(0)).intValue();
for(int i=1,j=0; j < operators.size(); i++,j++) {
char op = ((Character)operators.get(j)).charValue();
switch(op) {
case '+':
result += ((Integer)numbers.get(i)).intValue();
break;
case '-':
result -= ((Integer)numbers.get(i)).intValue();
break;
case '*':
result *= ((Integer)numbers.get(i)).intValue();
break;
case '/':
result /= ((Integer)numbers.get(i)).doubleValue();
}
}
System.out.println(result);
}
Hi,
warum will eigentlich die If-Anweisung nicht funktionieren?
Code:
if(get.charAt(0) == '-') // Falls die erste Zahl negativ ist
rechnung -= ((Integer) itr.next()).intValue();
else
rechnung= ((Integer) itr.next()).intValue();
Hi,
ich will, das wenn jetzt jemand auf den Plus-Button drückt und danach auf den Minus-Button, dass der Plus-Zeichen zu einem Minuszeichen wird.
Das funktioniert zwar, aber jedes Mal ist das auch bei Zahlen der Fall.
Wenn ich also 777 und dann den Plus-Button drücke, steht dann 77+ da.
Ich habe jetzt eine anscheinende bombensichere If-Anweisung programmiert und trotzdem wird noch die Zahl subtrahiert.
Woran kann das liegen?!
Code:
public void actionPerformed(ActionEvent e)
{
Object quelle= e.getSource();
String get= tfEingabe.getText();
String a= ((JButton) quelle).getText();
if(quelle == btBerechnen)
berechnen();
else if(quelle == btReset)
tfEingabe.setText("");
else {
if(get.equals(""))
tfEingabe.setText(get + a);
else if (get.charAt(get.length()-1) == '+' && quelle == btPlus || quelle == btMinus || quelle == btMal || quelle == btGeteilt || get.charAt(get.length()-1) == '-' && quelle == btMinus || quelle == btPlus || quelle == btMal || quelle == btGeteilt || get.charAt(get.length()-1) == '*' && quelle == btMal || quelle == btPlus || quelle == btMinus || quelle == btGeteilt || get.charAt(get.length()-1) == '/' && quelle == btGeteilt || quelle == btPlus || quelle == btMinus || quelle == btMal){
StringBuffer buff= new StringBuffer(get);
buff.setCharAt(buff.length()-1, a.charAt(0));
tfEingabe.setText(buff.toString());
}
else
tfEingabe.setText(get + a);
}
}
Liebe Grüße
Reality
PS: Das Problem ein Post weiter oben habe ich auch noch nicht gelöst!
else if (get.charAt(get.length()-1) == '+' && quelle == btPlus || quelle == btMinus || quelle == btMal || quelle == btGeteilt || get.charAt(get.length()-1) == '-' && quelle == btMinus || quelle == btPlus || quelle == btMal || quelle == btGeteilt || get.charAt(get.length()-1) == '*' && quelle == btMal || quelle == btPlus || quelle == btMinus || quelle == btGeteilt || get.charAt(get.length()-1) == '/' && quelle == btGeteilt || quelle == btPlus || quelle == btMinus || quelle == btMal)