I can see that there are a lot of java calculators on here, so I hope it hasn't gotten too old. This is a basic 4-function calculator in java using the swing interface. I am positive that it is inefficient, so don't hold back or anything. Here's the code, leaving out the code auto-generated by Netbeans for the swing interface (though my the source file is here, if you need to look at it):
package CalcViewer;
/**
*
* @author wesrickey
*/
public class CalcView extends javax.swing.JFrame {
String expression = "";
String[] expressionArray;
String firstTerm;
String secondTerm;
double firstDoub;
double secondDoub;
boolean isResult = false;
/**
* Creates new form CalcView
*/
public CalcView() {
initComponents();
}
public double doCalc(char op) {
double result = 0;
// couldn't get the regex to work as one term, so this'll have to do for now
if (expression.contains("+")) {
expressionArray = expression.split("\\+");
} else if (expression.contains("-")) {
expressionArray = expression.split("-");
} else if (expression.contains("*")) {
expressionArray = expression.split("\\*");
} else if (expression.contains("/")) {
expressionArray = expression.split("/");
}
firstDoub = Double.parseDouble(expressionArray[0]);
secondDoub = Double.parseDouble(expressionArray[1]);
if (op == 'p') {
result = firstDoub + secondDoub;
} else if (op == 'm') {
result = firstDoub - secondDoub;
} else if (op == 't') {
result = firstDoub * secondDoub;
} else if (op == 'd') {
result = firstDoub / secondDoub;
}
isResult = true;
return result;
}
// same story as above with the regex not working for me
public boolean hasPattern(String input) {
if (input.contains("+")) {
return true;
} else if (input.contains("-")) {
return true;
} else if (input.contains("*")) {
return true;
} else if (input.contains("/")) {
return true;
} else return false;
}
(auto-generated layout code)
private void btnOneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOneActionPerformed
setFocusable(true);
if (isResult) {
isResult = false;
}
expression += "1";
textDisplay.setText(expression);
}//GEN-LAST:event_btnOneActionPerformed
private void btnTwoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTwoActionPerformed
if (isResult) {
isResult = false;
}
expression += "2";
textDisplay.setText(expression);
}//GEN-LAST:event_btnTwoActionPerformed
private void btnThreeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnThreeActionPerformed
if (isResult) {
isResult = false;
}
expression += "3";
textDisplay.setText(expression);
}//GEN-LAST:event_btnThreeActionPerformed
private void btnFourActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFourActionPerformed
if (isResult) {
isResult = false;
}
expression += "4";
textDisplay.setText(expression);
}//GEN-LAST:event_btnFourActionPerformed
private void btnFiveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFiveActionPerformed
if (isResult) {
isResult = false;
}
expression += "5";
textDisplay.setText(expression);
}//GEN-LAST:event_btnFiveActionPerformed
private void btnSixActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSixActionPerformed
if (isResult) {
isResult = false;
}
expression += "6";
textDisplay.setText(expression);
}//GEN-LAST:event_btnSixActionPerformed
private void btnSevenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSevenActionPerformed
expression += "7";
textDisplay.setText(expression);
}//GEN-LAST:event_btnSevenActionPerformed
private void btnEightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEightActionPerformed
expression += "8";
textDisplay.setText(expression);
}//GEN-LAST:event_btnEightActionPerformed
private void btnNineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNineActionPerformed
if (isResult) {
isResult = false;
}
expression += "9";
textDisplay.setText(expression);
}//GEN-LAST:event_btnNineActionPerformed
private void btnZeroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnZeroActionPerformed
if (isResult) {
isResult = false;
}
if (!expression.equals("0")) {
expression += "0";
}
textDisplay.setText(expression);
}//GEN-LAST:event_btnZeroActionPerformed
private void btnClearAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearAllActionPerformed
expression = "";
textDisplay.setText("0");
}//GEN-LAST:event_btnClearAllActionPerformed
private void btnPlusActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPlusActionPerformed
if (!hasPattern(expression)) {
expression += "+";
}
}//GEN-LAST:event_btnPlusActionPerformed
private void btnSubtractActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSubtractActionPerformed
if (!hasPattern(expression)) {
expression += "-";
}
}//GEN-LAST:event_btnSubtractActionPerformed
private void btnMultiplyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMultiplyActionPerformed
if (!hasPattern(expression)) {
expression += "*";
}
}//GEN-LAST:event_btnMultiplyActionPerformed
private void btnDivideActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDivideActionPerformed
if (!hasPattern(expression)) {
expression += "/";
}
}//GEN-LAST:event_btnDivideActionPerformed
private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEqualsActionPerformed
double resultDoub;
String resultString;
// does the calculation base on the input operation
if (expression.contains("+")) {
resultDoub = doCalc('p');
} else if (expression.contains("-")) {
resultDoub = doCalc('m');
} else if (expression.contains("*")) {
resultDoub = doCalc('t');
} else if (expression.contains("/")) {
resultDoub = doCalc('d');
} else {
resultDoub = 0;
}
// sets result as a double if a double and an integer if an integer
// as opposed to before when everything displayed as a double
if (!(resultDoub % 1 == 0)) {
resultString = Double.toString(resultDoub);
} else {
int resultInt = (int)resultDoub;
resultString = Integer.toString(resultInt);
}
expression = resultString;
textDisplay.setText(resultString);
}//GEN-LAST:event_btnEqualsActionPerformed
private void btnDecimalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDecimalActionPerformed
expression += ".";
}//GEN-LAST:event_btnDecimalActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(CalcView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(CalcView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(CalcView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(CalcView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CalcView().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnClearAll;
private javax.swing.JButton btnClearEntry;
private javax.swing.JButton btnDecimal;
private javax.swing.JButton btnDivide;
private javax.swing.JButton btnEight;
private javax.swing.JButton btnEquals;
private javax.swing.JButton btnFive;
private javax.swing.JButton btnFour;
private javax.swing.JButton btnMultiply;
private javax.swing.JButton btnNine;
private javax.swing.JButton btnOne;
private javax.swing.JButton btnPlus;
private javax.swing.JButton btnPositiveNegative;
private javax.swing.JButton btnSeven;
private javax.swing.JButton btnSix;
private javax.swing.JButton btnSubtract;
private javax.swing.JButton btnThree;
private javax.swing.JButton btnTwo;
private javax.swing.JButton btnZero;
private javax.swing.JTextField textDisplay;
// End of variables declaration//GEN-END:variables
}
One of the main flaws that I'm aware of is my hasPattern();
method. I had to use that to check if the expression has an operator in it, since I could not for the life of me get the regular expression for that pattern to work, so I improvised.