dag,
Ik ben bezig om geheugenfuncties te schrijven voor een rekenmachine.
Zoals de MR, M+,M-, MC en MS. Weet iemand toevalig hoe je deze formules aanmaakt in deze class wat hieronder staat. Alvast bedankt.
Ik ben bezig om geheugenfuncties te schrijven voor een rekenmachine.
Zoals de MR, M+,M-, MC en MS. Weet iemand toevalig hoe je deze formules aanmaakt in deze class wat hieronder staat. Alvast bedankt.
package calc;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout;
import javax.swing.*;
class ButtonHandler
implements ActionListener
{
private CalcDisplay display;
private String lastOp;
private String strVal;
private double total;
private double number;
private boolean firsttime;
private boolean operatorPressed;
ButtonHandler(CalcDisplay calcdisplay)
{
display = calcdisplay;
firsttime = true;
strVal = "";
}
public void actionPerformed(ActionEvent actionevent)
{
JButton button = (JButton)actionevent.getSource();
String s = button.getLabel().trim();
if(Character.isDigit(s.charAt(0)))
{
handleNumber(s);
} else
{
calculate(s);
}
}
void calculate(String s)
{
operatorPressed = true;
if(firsttime && !Operator.isUnary(s))
{
total = getNumberOnDisplay();
firsttime = false;
}
if(Operator.isUnary(s))
{
handleUnaryOp(s);
} else
if(lastOp != null)
{
handleBinaryOp(lastOp);
}
if(!Operator.isUnary(s))
{
lastOp = s;
}
}
void handleUnaryOp(String s)
{
if(s.equals("+/-"))
{
number = negate(getNumberOnDisplay() + "");
display.append(number + "");
return;
}
if(s.equals("."))
{
handleDecPoint();
return;
}
if(s.equals("sqrt"))
{
number = Math.sqrt(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("cos"))
{
number = Math.cos(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("acos"))
{
number = Math.acos(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("tan"))
{
number = Math.tan(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("atan"))
{
number = Math.atan(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("sin"))
{
number = Math.sin(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("asin"))
{
number = Math.asin(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("log"))
{
number = Math.log10(getNumberOnDisplay());
display.append(number + "");
return;
}
if(s.equals("="))
{
if(lastOp != null && !Operator.isUnary(lastOp))
{
handleBinaryOp(lastOp);
}
lastOp = null;
firsttime = true;
return;
} else
{
clear();
return;
}
}
void handleBinaryOp(String s)
{
if(s.equals("cos"))
{
total = Math.cos(number);
}
if(s.equals("acos"))
{
total = Math.acos(number);
}
if(s.equals("tan"))
{
total = Math.tan(number);
}
if(s.equals("atan"))
{
total = Math.atan(number);
}
if(s.equals("sin"))
{
total = Math.sin(number);
}
if(s.equals("asin"))
{
total = Math.asin(number);
}
if(s.equals("log"))
{
total = Math.log(number);
}
if(s.equals("+"))
{
total += number;
} else
if(s.equals("-"))
{
total -= number;
} else
if(s.equals("x"))
{
total *= number;
} else
if(s.equals("/"))
{
total /= number;
} else
if(s.equals("pow"))
{
total = Math.pow(total, number);
}
display.append(total + "");
}
void handleNumber(String s)
{
if(!operatorPressed)
{
strVal += s;
} else
{
operatorPressed = false;
strVal = s;
}
number = (new Double(strVal)).doubleValue();
display.append(strVal);
}
void handleDecPoint()
{
operatorPressed = false;
if(strVal.indexOf(".") < 0)
{
strVal += ".";
}
display.append(strVal);
}
double negate(String s)
{
operatorPressed = false;
if(number == (double)(int)number)
{
s = s.substring(0, s.indexOf("."));
}
if(s.indexOf("-") < 0)
{
strVal = "-" + s;
} else
{
strVal = s.substring(1);
}
return (new Double(strVal)).doubleValue();
}
double getNumberOnDisplay()
{
return (new Double(display.getText())).doubleValue();
}
void clear()
{
firsttime = true;
lastOp = null;
strVal = "";
total = 0.0D;
number = 0.0D;
display.clear();
display.append("0");
}
}