Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Java Stacks calculator equal sign problem

$
0
0
I had to make a calculator using stacks. Here is what i have so far. For some reason, the equal sign doesn't work. Can someone help me fix this. The code shows no error,

import java.awt.*;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
import java.util.*;
public class Calculator extends JFrame implements ActionListener {
	

	public static void main(String args[])
     {
		  
            Calculator cal=new Calculator();
     }
	 
	String numbers[]={"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","CE","C","=","+/-"};
    JButton button[]=new JButton[19];
    Panel p[]=new Panel[6];
    TextField text;
    Box box;
    FlowLayout fv;
     public  Calculator()
    {
       
           this.setDefaultCloseOperation(EXIT_ON_CLOSE);
           box=Box.createVerticalBox();
           fv=new FlowLayout();
           fv.setVgap(20);

         this.setLocationRelativeTo(null);       
           for(int i=0;i<numbers.length;i++)
           {
                  button[i]=new JButton(numbers[i]);
                  button[i].addActionListener(this);
                  if(i!=15&&i!=16)
                  {
                         button[i].setPreferredSize(new Dimension(55,35));
                  }
                  else
                  {
                           button[i].setPreferredSize(new Dimension(85,35));
                  }
                  if(i<6)
                  {
                         p[i]=new Panel();
                         box.add(p[i]);
                  }
                  if(i==0)
                  {
                         text=new TextField("0",30);
                         p[0].add(text);
                  }
           }
           //ADDS Buttons
           p[1].add(button[7]);p[1].add(button[8]);p[1].add(button[9]);p[1].add(button[10]); //7,8,9,+
           p[2].add(button[4]);p[2].add(button[5]);p[2].add(button[6]);p[2].add(button[11]); //4,5,6,-
           p[3].add(button[1]);p[3].add(button[2]);p[3].add(button[3]);p[3].add(button[12]); //1,2,3, *
           p[4].add(button[0]);p[4].add(button[14]);p[4].add(button[18]);p[4].add(button[13]); //0,., +/-, /
           p[5].add(button[15]);p[5].add(button[16]);p[5].add(button[17]); //CE, C, =
           this.add(box);
           this.setBounds(520,200,280,320);
           this.setResizable(false);
           this.setVisible(true);
           this.validate();
    }
       int press=0;                            
       int press1=0;                          
       int press2=0;                           
       int strlen=0;                           
       StringBuffer op1=new StringBuffer("0"); 
       StringBuffer op2=new StringBuffer("0"); 
       String str;
       String[] tokens;
       double result;
       Stack<Double> operands = new Stack();
       Stack<String> operators = new Stack();
       double sum1=0;                          
	
	 public void actionPerformed(ActionEvent e){
		 
		 //display numbers
		 if(e.getSource()==button[0])
	        {
	               this.displayNumber(0);
	        }
	        if(e.getSource()==button[1])
	        {
	               this.displayNumber(1);
	        }
	        if(e.getSource()==button[2])
	        {
	               this.displayNumber(2);
	        }
	        if(e.getSource()==button[3])
	        {
	               this.displayNumber(3);
	        }
	        if(e.getSource()==button[4])
	        {
	               this.displayNumber(4);
	        }
	        if(e.getSource()==button[5])
	        {
	               this.displayNumber(5);
	        }
	        if(e.getSource()==button[6])
	        {
	               this.displayNumber(6);
	        }
	        if(e.getSource()==button[7])
	        {
	               this.displayNumber(7);
	        }
	        if(e.getSource()==button[8])
	        {
	               this.displayNumber(8);
	        }
	        if(e.getSource()==button[9])
	        {
	         this.displayNumber(9);
	        }
	        
	        //other variables
	        if(e.getSource()==button[10])        // +     
	        {
	            this.pressOperator(10);
	        }
	     if(e.getSource()==button[11])             // -
	        {
	            this.pressOperator(11);
	        } 
	        if(e.getSource()==button[12])         // *    
	     {
	               this.pressOperator(12);
	        }
	        if(e.getSource()==button[13])   //divide           
	        {
	        this.pressOperator(13);
	        }   
	        if(e.getSource()==button[14])       // decimal .      
	        {
	               if(op1.charAt(op1.length()-1)!='+'&&op1.charAt(op1.length()-1)!='-'&&op1.charAt(op1.length()-1)!='*'&&op1.charAt(op1.length()-1)!='/'&&press!=1)
	               {
	                      op1.append(button[14].getText());
	                      op2.append(button[14].getText());
	                      text.setText(op1.toString());
	                      press=1;
	               }
	        }
	        if(e.getSource()==button[18])       //  plus or minus+/-
	        {
	               if(op1.charAt(op1.length()-1)!='+'&&op1.charAt(op1.length()-1)!='-'&&op1.charAt(op1.length()-1)!='*'&&op1.charAt(op1.length()-1)!='/')
	               {
	                      if(press2==0)
	                      {
	                    	  op1.insert(strlen, "-");
	                    	  op2.insert(strlen, "@");               
	                             text.setText(op1.toString());
	                             press2=1;
	                      }
	                      else
	                      {
	                    	  op1.deleteCharAt(strlen);
	                    	  op2.deleteCharAt(strlen);
	                             text.setText(op1.toString());
	                             press2=0;
	                      }
	               }
	        }
	        if(e.getSource()==button[15])             //  CE
	        {
	               if(strlen!=0)
	               {
	            	   op1.delete(strlen, op1.length());
	            	   op2.delete(strlen, op2.length());
	                 text.setText(op1.toString());
	               }
	               else
	               {
	            	   op1.delete(0,op1.length());
	                      op2.delete(0,op2.length());
	                      op1.append("0");
	                      op2.append("0");
	                      text.setText(op1.toString());
	                      press=0;
	                      press2=0;
	               }
	        }
	        if(e.getSource()==button[16])            // C
	     {
	        	op1.delete(0, op1.length());
	             op2.delete(0, op2.length());
	             op1.append("0");
	              op2.append("0");
	              text.setText(op1.toString());
	              press=0;
	              press1=0;
	              press2=0;
	              strlen=0;
	        }
	        if(e.getSource()==button[17])             // Equals =
	        {
	        	if(op1.charAt(op1.length()-1)!='+'&&op1.charAt(op1.length()-1)!='-'&&op1.charAt(op1.length()-1)!='*'&&op1.charAt(op1.length()-1)!='/'&&press!=1)
	               {
	        		calculate(operands,operators);       
	               }	
	        }
	      
	 }
	 
	  public void pressOperator(int i)          
      {
              if(op1.charAt(op1.length()-1)!='+'&&op1.charAt(op1.length()-1)!='-'&&op1.charAt(op1.length()-1)!='*'&&op1.charAt(op1.length()-1)!='/'&&op1.charAt(op1.length()-1)!='.')    
              {
            	  op1.append(button[i].getText());
                     op2.append(button[i].getText()); 
                     text.setText(op1.toString());
                     press=0;
                     press1=1;
                     press2=0;
                     strlen=op1.length();
              }
      }
	    public void displayNumber(int i)         ///number display to box   
	    {
	          if(press1!=1&&press!=1&&op1.charAt(0)=='0')
	               {
	        	  op1.replace(0, 1,button[i].getText());
	                      op2.replace(0, 1,button[i].getText());
	                   text.setText(op1.toString());
	               }
	               else
	               {
	            	   op1.append(button[i].getText());
	                      op2.append(button[i].getText());
	                      text.setText(op1.toString());
	               }   
	    }
	 private static double add(Stack<Double> stk)
     {
        double op2 = stk.pop();
        double op1 = stk.pop();
        double result = op1 + op2;
        stk.push(result);
        return result;
     }// end add
     
      private static double subtract(Stack<Double> stk)
     {
        double op2 = stk.pop();
        double op1 = stk.pop();
        double result = op1 - op2;
        stk.push(result);
        return result;
     }// end subtract
     
      private static double divide(Stack<Double> stk)
     {
        double op2 = stk.pop();
        double op1 = stk.pop();
        double result = op1 / op2;
        stk.push(result);
        return result;
     }//end divide
  	
      private static double multiply(Stack<Double> stk)
     {
        double op2 = stk.pop();
        double op1 = stk.pop();
        double result = op1 * op2;
        stk.push(result);
        return result;
     }//end multiply
      
   
      
  	/**perform calculations based on operators, loop until operator stack is empty*/
      private static double calculate(Stack<Double> stkd, Stack<String> stks)
     {
        double result = 0;
        String str = "";
     	
        while(!stks.empty())  
        {
           str = stks.pop();
           if(str.equals("+"))
              result = add(stkd);
           else if(str.equals("-"))
              result = subtract(stkd);
           else if(str.equals("/"))
              result = divide(stkd);
           else if(str.equals("*"))
              result = multiply(stkd);
        }//end while
        return result;
     }
	
     
	
}


Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>