java.lang.ClassCastException

Timo2010

Mitglied
Guten Tag,
ich brauche etwas Hilfe bei meinem Code. Ich erhalte folgenden Fehler, sobald ich folgende Buttonkombination habe: Operand, Operator, Operand, Operator, Operand, Operator
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
	at TaschenrechnerModel.rechne(TaschenrechnerModel.java:36)
	at TaschenrechnerModel.useoperator(TaschenrechnerModel.java:70)
	at TaschenrechnerModel.actionPerformed(TaschenrechnerModel.java:128)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Mein Quellcode lautet wie folgt:
Java:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import zentralabi.linear.Stack;

public class TaschenrechnerModel implements ActionListener{
	private String operatorstand;
	private int sizeoperanden = 0;
	private int zwischenergebnis;
	private String usedoperator;

	
	public static void main(String[] args) {
		TaschenrechnerModel objekt = new TaschenrechnerModel();
	}
	public TaschenrechnerModel(){
	}
	public void checkoperator(String operatora, Object operatorb){
		if ((operatora == "*" || operatora == "/") && (operatorb == "*" || operatorb == "/")){
			operatorstand = "Gleichwertig";	
		}
		else if ((operatora == "-" || operatora == "+") && (operatorb == "*" || operatorb == "/")){
			operatorstand = "Niedriger";
		}
		else if ((operatora == "*" || operatora == "/") && (operatorb == "+" || operatorb == "-")){
			operatorstand = "Hoeher";
		}
		else if ((operatora == "-" || operatora == "+") && (operatorb == "-" || operatorb == "+")){
			operatorstand = "Gleichwertig";
		}
	}
	public void rechne(){
		int operandaint = Integer.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
		TaschenrechnerUIJWindow.operanden.pop();
		int operandbint = Integer.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
		TaschenrechnerUIJWindow.operanden.pop();
		String operator = (String)TaschenrechnerUIJWindow.operatoren.top();
		TaschenrechnerUIJWindow.operatoren.top();
		if (operator == "*"){
			zwischenergebnis = operandaint * operandbint;
		}
		else if (operator == "/"){
			zwischenergebnis = operandaint / operandbint;
		}
		else if (operator == "+"){
			zwischenergebnis = operandaint + operandbint;
		}
		else if (operator == "-"){
			zwischenergebnis = operandaint - operandbint;
		}
	}
	
	public void useoperator(String operator){
		TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+operator);
		TaschenrechnerUIJWindow.operanden.push(TaschenrechnerUIJWindow.operandenstrings.toString());
		sizeoperanden++; // Funktioniert noch nicht!!!
		TaschenrechnerUIJWindow.operandenstrings.setLength(0);
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){
			TaschenrechnerUIJWindow.operatoren.push(operator);
		}
		else {
			checkoperator(operator,TaschenrechnerUIJWindow.operatoren.top());
			System.out.println(""+operatorstand);
			if(operatorstand == "Hoeherwertig"){
				TaschenrechnerUIJWindow.operatoren.push(operator);
			}
			else if (operatorstand == "Gleichwertig"){
					if (sizeoperanden >=2){
						rechne();
						TaschenrechnerUIJWindow.operanden.push(zwischenergebnis);
					}
					}
		}
		
	}
	
	public void actionPerformed(ActionEvent e) {
		/*
		 * Operanden werden auf den Operandenstapel gelegt
		 */
if (e.getSource()==TaschenrechnerUIJWindow.nine){
	TaschenrechnerUIJWindow.operandenstrings.append(9);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+9);
}
else if (e.getSource()==TaschenrechnerUIJWindow.eight){
	TaschenrechnerUIJWindow.operandenstrings.append(8);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+8);
}
else if (e.getSource()==TaschenrechnerUIJWindow.seven){
	TaschenrechnerUIJWindow.operandenstrings.append(7);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+7);
}
else if (e.getSource()==TaschenrechnerUIJWindow.six){
	TaschenrechnerUIJWindow.operandenstrings.append(6);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+6);
}
else if (e.getSource()==TaschenrechnerUIJWindow.five){
	TaschenrechnerUIJWindow.operandenstrings.append(5);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+5);
}
else if (e.getSource()==TaschenrechnerUIJWindow.four){
	TaschenrechnerUIJWindow.operandenstrings.append(4);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+4);
}
else if (e.getSource()==TaschenrechnerUIJWindow.three){
	TaschenrechnerUIJWindow.operandenstrings.append(3);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+3);
}
else if (e.getSource()==TaschenrechnerUIJWindow.two){
	TaschenrechnerUIJWindow.operandenstrings.append(2);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+2);
}
else if (e.getSource()==TaschenrechnerUIJWindow.one){
	TaschenrechnerUIJWindow.operandenstrings.append(1);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+1);
}
else if (e.getSource()==TaschenrechnerUIJWindow.zero){
	TaschenrechnerUIJWindow.operandenstrings.append(0);
	TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+0);
	}
/*
 * Operatoren werden überprüft und je nach "Gewichtung" auf den Operatorenstapel gelegt
 */

if (e.getSource()==TaschenrechnerUIJWindow.mal){
	usedoperator = "*";
	useoperator(usedoperator);
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.geteilt){
		usedoperator = "/";
		useoperator(usedoperator);
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.plus){
		usedoperator = "+";
		useoperator(usedoperator);
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.minus){
		usedoperator = "-";
		useoperator(usedoperator);
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.comma){
		usedoperator = "*";
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.plusminus){
		usedoperator = "*";
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.MC){
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){

		}
		else {
			checkoperator("*",TaschenrechnerUIJWindow.operatoren.top());
		}
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.Mplus){
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){

		}
		
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.Mminus){
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){

		}
		}
	else if (e.getSource()==TaschenrechnerUIJWindow.MR){
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){

		}
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.C){
		if (TaschenrechnerUIJWindow.operatoren.isEmpty()){

		}
	}
	else if (e.getSource()==TaschenrechnerUIJWindow.giveresult){
		System.out.println(TaschenrechnerUIJWindow.operanden.top());
		System.out.println(TaschenrechnerUIJWindow.operatoren.top());
	}
}
}

Ich hoffe, ihr wisst, wo der Fehler beim casten des Strings liegt. Ich finde ihn leider nicht. Ich vermute, dass es an der Methode rechne() liegt.

Danke schon einmal für eure Hilfe.
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at TaschenrechnerModel.rechne(TaschenrechnerModel.java:36)
Ich finde ihn leider nicht. Ich vermute, dass es an der Methode rechne() liegt..

Joah, gut vermutet :)

Was liefert dir denn operanden.top() ? ich vermute ein Integer? Du probierst aber auf String zu casten und dann Integer.valueOf ? Wenn top() bereits ein Integer liefert, würde das ja keinen Sinn machen :D

Achja und : http://www.java-forum.org/top-fragen/1350-vergleichen-strings.html ;)
 

Timo2010

Mitglied
Danke, aber der Inhalt ist ja kein Integer, sondern ein StringBuilder
Siehe:
Java:
TaschenrechnerUIJWindow.operanden.push(TaschenrechnerUIJWindow.operandenstrings.toString());
Deswegen kann ich ja nicht einfach schreiben:
Java:
 int operandaint = TaschenrechnerUIJWindow.operanden.top();
Wie könnte man es denn sonst schreiben?
 

eRaaaa

Top Contributor
Ist aber doch kein Integer.
???:L

Danke, aber der Inhalt ist ja kein Integer

Naja, die Fehlermeldung sagt ja was anderes ! TaschenrechnerUIJWindow.operanden ...was liefert top() ? Die Frage hast du leider nicht beantwortet und was du mit dem StringBuilder sagen willst, verstehe ich auch nicht, der hat keine top() / push() Methoden.

Was ich mir hier vorstellen kann ist, dass du dort eine Art Stack gebaut hast und dort eben deine Operanden + Operatoren ablegst. (also z.B. dort enthalten ist [5, "+", 5]. Jetzt aber mit top() eine Zahl = Integer holst, die kannste natürlich nicht einfach so auf String casten...Also quasi die Aufrufe vertauschst hast, denn Zeile 38 müsste dann vor Zeile 36 aufgerufen werden in dem Fall! (allerdings verstehe ich den Cast auf String Allgemein nicht ;( )

Fakt ist, du hast hier einen Integer den du versuchst zu String zu casten (aber anscheinend sieht das Extemefall anders, vllt. kann er also mehr dazu sagen...)
 

Timo2010

Mitglied
TaschenrechnerUIJWindow.operanden.top(); sollte einen StringBuilder zurückliefern. Es handelt sich um einen Stack, der einen StringBuilder über die push() Methode bekommen hat. Dieser StringBuilder wurde zum String über die Methode toString().

Was ich mir hier vorstellen kann ist, dass du dort eine Art Stack gebaut hast und dort eben deine Operanden + Operatoren ablegst. (also z.B. dort enthalten ist [5, "+", 5].
Genau so ist es. Ein Stack für die Operatoren und einen für die Operanden.

Der Stack erhält ja ein StringBuilder Objekt. Daher weiß ich nicht, wie ich damit rechnen kann. Ich gehe davon aus, dass Extremefall meint, dass mittels push keine Zahl sondern ein StringBuilder übergeben wurde.
 

Sonecc

Gesperrter Benutzer
Ohne zu wissen, wie TaschenrechnerUIJWindow aussieht (speziell die top und die push methode) kann ich da so auch nix sagen
 

ymene

Bekanntes Mitglied
Einmal läuft die Konvertierung ja durch. Daher würd ich vermuten, dass du einfach teilweise falsche Werte in deinem Stack gespeichert hast. Biste denn mal mit dem Debugger durchgegangen, um zu gucken, was wirklich zu diesem Zeitpunkt auf dem Stack liegt? Oder hast du dir Methoden geschrieben, die dir den Stackinhalt einfach jederzeit ausgeben können? Allerdings kann ich deine Cast-Struktur auch nicht ganz nachvollziehen, da wären die genannten Methoden wirklich hilfreich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T java.lang.ClassCastException: Allgemeine Java-Themen 4
C java.lang.ClassCastException Allgemeine Java-Themen 3
W java.lang.ClassCastException Allgemeine Java-Themen 10
G java.lang.ClassCastException Allgemeine Java-Themen 3
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Threads - java.lang.IllegalThreadStateException Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Eclipse Dll einbinden java.lang.UnsatisfiedLinkError nur in Eclipse nicht via javac Allgemeine Java-Themen 1
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
Crooda Compiler-Fehler java.lang.NoClassDefFoundError bitcoinj Allgemeine Java-Themen 1
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
S java.lang.NoClassDefFoundError Allgemeine Java-Themen 5
J Compiler-Fehler java.lang.StringIndexOutOfBoundsException Allgemeine Java-Themen 12
D java.lang.TypeNotPresentException Allgemeine Java-Themen 3
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
H java.lang.OutOfMemoryError bei der wiederholten Erzeugng von Threads Allgemeine Java-Themen 8
B Variable class in java.lang.Object Allgemeine Java-Themen 11
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
T ProcessBuilder (java.lang.NoClassDefFoundError) Allgemeine Java-Themen 2
T java.lang.AssertionError: Allgemeine Java-Themen 4
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
B java.lang.UnsupportedClassVersionError Allgemeine Java-Themen 12
M cannot be cast to java.lang.Comparable Allgemeine Java-Themen 5
B JNI - java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 21
E Interpreter-Fehler java.lang.ExceptionInInitializerError Allgemeine Java-Themen 12
P Fehler beim Programmstart: java.lang.NoClassDefFound Allgemeine Java-Themen 12
B Java - java.lang Allgemeine Java-Themen 12
sylo java.lang.NoSuchMethodError: Obwohl Methode vorhanden Allgemeine Java-Themen 8
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
H Applet java.lang.reflect.InvocationTargetException Allgemeine Java-Themen 9
M SerialPort RS232 : java.lang.NoSuchFieldError: eis Allgemeine Java-Themen 2
U java.lang.ClassNotFoundException: .jar Allgemeine Java-Themen 8
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
N java.lang.InstantiationException Allgemeine Java-Themen 10
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
D replaceAll => no such java.lang.NoSuchMethodError Allgemeine Java-Themen 5
G java.lang.LinkageError: loader constraints violation. Allgemeine Java-Themen 3
O java.lang.NumberFormatException für normalen integer Allgemeine Java-Themen 4
G Javadoc generiert keine Links zu java.lang Klassen? Allgemeine Java-Themen 4
Y java.lang.UnsupportedClassVersionError: Allgemeine Java-Themen 5
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
E java.lang.outofmemory über windows-cmd ändern Allgemeine Java-Themen 6
J Folgender Fehler: java.lang.NullPointerException Allgemeine Java-Themen 4
I java.lang.UnsatisfiedLinkError: Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
J java.lang.StackOverflowError Debugging? Allgemeine Java-Themen 51
D java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 5
S Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink Allgemeine Java-Themen 2
S java.lang.UnsatisfiedLinkError mit JNI Allgemeine Java-Themen 6
reibi java.lang.Class - Resource - Solaris Allgemeine Java-Themen 17
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
M java.lang.UnsupportedClassVersionError: Bad version number i Allgemeine Java-Themen 5
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
O "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBounds Allgemeine Java-Themen 6
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
S java.lang.OutOfMemoryError: Java Allgemeine Java-Themen 22
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
E Java Fehlermeldung java.lang.NoClassDefFoundError Allgemeine Java-Themen 3
G Problem mit java.lang.reflect.Field Allgemeine Java-Themen 15
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
M java.lang.NullPointerException im Chatclient Allgemeine Java-Themen 12
H java.lang.ExceptionInInitializerError Allgemeine Java-Themen 7
D java.lang.IllegalMonitorStateException: current thread not Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
T Profifrage: java.lang.StackOverflowError bei BigInteger Allgemeine Java-Themen 27
M java.lang.OutOfMemoryError Allgemeine Java-Themen 2
W java.lang.ClassNotFoundException Allgemeine Java-Themen 10
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S fehlermeldung java.lang.OutOfMemoryError Allgemeine Java-Themen 5
B java.lang.NullPointerException Allgemeine Java-Themen 11
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
J java.lang.ArrayIndexOutOfBoundsException Allgemeine Java-Themen 2
P Hilfe zu java.lang.Object Allgemeine Java-Themen 3
K java.lang.reflect - Getter und Setter ermitteln Allgemeine Java-Themen 8
G jTable-Problem --> java.lang.OutOfMemoryError Allgemeine Java-Themen 5
G Java.lang.Compiler Allgemeine Java-Themen 3
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
F java.lang.OutOfMemoryError Allgemeine Java-Themen 13
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben