geheugenfuncties in rekenmachine plaatsen

  • Onderwerp starter Onderwerp starter Rrs
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Rrs

Nieuwe gebruiker
Lid geworden
18 feb 2009
Berichten
2
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.
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");
}
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan