Hallo,
ich habe ein komisches Problem. Das Programm hängt sich auf, sobald unterschiedliche Operatoren gedrückt werden.
Der ActionListener:
Die rechne Methode:
Das komische ist, dass es bei den gleichen Operatoren (z.B. 4*4*4) funktioniert, aber bei unterschiedliche (z.B. 4*4/4) ab dem zweiten Operatoren hängt.
Wie kann es dazu kommen, dass ein Programm nicht mehr reagiert? Liegt es an der Schleife?
ich habe ein komisches Problem. Das Programm hängt sich auf, sobald unterschiedliche Operatoren gedrückt werden.
Der ActionListener:
Java:
if (e.getSource()==TaschenrechnerUIJWindow.mal){
mal = "*";
if (TaschenrechnerUIJWindow.operandenstrings.toString() != ""){
addOperand(TaschenrechnerUIJWindow.operandenstrings);
sizeoperanden++;
}
TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+mal);
if (TaschenrechnerUIJWindow.operatoren.isEmpty() || istHoeherwertig(mal,TaschenrechnerUIJWindow.operatoren.top())){
TaschenrechnerUIJWindow.operatoren.push(mal);
}
else {
while (!TaschenrechnerUIJWindow.operatoren.isEmpty()||!istHoeherwertig(mal,TaschenrechnerUIJWindow.operatoren.top())){
if (sizeoperanden >=2){
rechne(mal);
}
if (TaschenrechnerUIJWindow.operatoren.isEmpty()){
TaschenrechnerUIJWindow.operatoren.push(mal);
break;
}
}
}
}
if (e.getSource()==TaschenrechnerUIJWindow.geteilt){
geteilt = "/";
if (TaschenrechnerUIJWindow.operandenstrings.toString() != ""){
addOperand(TaschenrechnerUIJWindow.operandenstrings);
sizeoperanden++;
}
TaschenrechnerUIJWindow.anzeige.setText(TaschenrechnerUIJWindow.anzeige.getText()+geteilt);
if (TaschenrechnerUIJWindow.operatoren.isEmpty() || istHoeherwertig(geteilt,TaschenrechnerUIJWindow.operatoren.top())){
TaschenrechnerUIJWindow.operatoren.push(geteilt);
}
else {
while (!TaschenrechnerUIJWindow.operatoren.isEmpty()||!istHoeherwertig(geteilt,TaschenrechnerUIJWindow.operatoren.top())){
if (sizeoperanden >=2){
rechne(geteilt);
}
if (TaschenrechnerUIJWindow.operatoren.isEmpty()){
TaschenrechnerUIJWindow.operatoren.push(geteilt);
break;
}
}
}
}
Die rechne Methode:
Java:
public void rechne(String eingabeoperator){
if (!TaschenrechnerUIJWindow.operatoren.isEmpty() && sizeoperanden>=2){
double operandaint = Double.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
TaschenrechnerUIJWindow.operanden.pop();
double operandbint = Double.valueOf((String)TaschenrechnerUIJWindow.operanden.top());
TaschenrechnerUIJWindow.operanden.pop();
String stackoperator = (String)TaschenrechnerUIJWindow.operatoren.top();
TaschenrechnerUIJWindow.operatoren.pop();
if (stackoperator == "*"){
zwischenergebnis = operandbint * operandaint;
}
if (stackoperator == "/"){
zwischenergebnis = operandbint / operandaint;
}
if (stackoperator == "+"){
zwischenergebnis = operandaint + operandbint;
}
if (stackoperator == "-"){
zwischenergebnis = operandaint - operandbint;
}
zwischenergebnisstring = String.valueOf(zwischenergebnis);
TaschenrechnerUIJWindow.operanden.push(zwischenergebnisstring);
sizeoperanden-=1;
}
System.out.println(zwischenergebnisstring);
}
Das komische ist, dass es bei den gleichen Operatoren (z.B. 4*4*4) funktioniert, aber bei unterschiedliche (z.B. 4*4/4) ab dem zweiten Operatoren hängt.
Wie kann es dazu kommen, dass ein Programm nicht mehr reagiert? Liegt es an der Schleife?