Anywhere is bug 2017-04-23 06:49 采纳率: 0%
浏览 589

JAVA 计算器,求大神,急急急,帮帮忙

import java.awt.Frame;
import java.awt.Panel;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;

import java.util.Stack;
import java.lang.Integer;

public class ComputerFrame extends Frame implements ActionListener
{

Panel numberPanel;
TextField text;
Panel operatorPanel;
Button[] num;
Button[] oper;

    public ComputerFrame()
    {
        super("这是一个计算机");
        init();
    }



    public void init()
    {
        operatorPanel=new Panel();
        numberPanel=new Panel();
        text=new TextField(15);
        num=new Button[10];
        oper=new Button[7];

        oper[0]=new Button("C");
        oper[1]=new Button("←");
        oper[2]=new Button("+");
        oper[3]=new Button("-");
        oper[4]=new Button("*");
        oper[5]=new Button("/");    
        oper[6]=new Button("=");

        setSize(200,500);
        setFont(new Font("Dialog",Font.PLAIN,30));

        setLayout(new FlowLayout());

        numberPanel.setLayout(new GridLayout(4,3,5,5));
        operatorPanel.setLayout(new GridLayout(4,2,5,5));


        add(text);

        add(numberPanel);
        add(operatorPanel);



        for(int i=1;i<10;i++)
        {
            num[i]=new Button(String.valueOf(i));
            numberPanel.add(num[i]);
            num[i].addActionListener(this);
        }

        num[0]=new Button(String.valueOf(0));
        numberPanel.add(num[0]);
        num[0].addActionListener(this);


        for(int i=0;i<=6;i++)
        {
            operatorPanel.add(oper[i]);
            oper[i].addActionListener(this);
         }



    }  


    public void actionPerformed(ActionEvent e)
    {
        String t=text.getText();
        int len=t.length();
        int[] nums=new int[2];
        String oparator="";


        for(int i=0;i<=9;i++)
        {
            if(e.getSource()==num[i])
            text.setText(t+num[i].getLabel());      
        }


        for(int i=2;i<6;i++)
        {
            if(e.getSource()==oper[i])
            {text.setText(t+oper[i].getLabel());
             oparator=oper[i].getLabel();
            }
        }

//清空

if(e.getSource()==oper[0])
{
text.setText(null);

        }

//删去

       if(e.getSource()==oper[1])
        {

            text.setText(t.substring(0,len-1));


        }

//等于

if(e.getSource()==oper[6])
{

text.setText(this.calculator(t));

        }
}


    public String calculator(String t){
        char lastoper='=';
        char c;
        char operator;
        int num1;
        int num2;
        String num=" ";
        String result;

        Stack operstack=new Stack();
        Stack numstack=new Stack();
        operstack.push(new Character('='));
        numstack.push(new Character('0'));



        for(int i=0;i <t.length();i++)
        {
            c=t.charAt(i);

        //情况一  数字
            if(Character.isDigit(c))
                {
                num=num+String.valueOf(c);
                }


        //情况二  运算符
            else if((c=='+')||(c=='-')||(c=='*')||(c=='/')||(c=='='))
                 {

                    if(!num.equals(" "))
                    {
                        numstack.push(new Integer(num));
                        num="";



                        char  s=((Character)operstack.peek()).charValue();

                        while(getRual(s)>getRual(c))//比较优先权 
                        {
                         operator=((Character)operstack.pop()).charValue();
                         num1=((Integer)numstack.pop()).intValue();
                         num2=((Integer)numstack.pop()).intValue();
                         numstack.push(cal(num1,num2,operator));
                        }


                        if(getRual(s)<=getRual(c))
                        {
                        operstack.push(new Character(c));
                        lastoper=c;
                        continue;
                        }

                    }
                 }      

        }



        Enumeration items=operstack.elements();
        while(items.hasMoreElements())
            {
            operator=((Character)operstack.pop()).charValue();
            num1=((Integer)numstack.pop()).intValue();
            num2=((Integer)numstack.pop()).intValue();
            numstack.push(cal(num1,num2,operator));

            }


        result=((Integer)operstack.pop()).toString();
        return   result;        




    }



public static int getRual(char c)
{
switch(c)
    {
    case '+':return 1;
    case '-':return 1;
    case '*':return 2;
    case '/':return 2;
    case '=':return 0;
    default: return -1;
    }
}

public static  int cal(int num1,int num2,char c)
{
switch(c)
    {
    case '+':return num1+num2;
    case '-':return num1-num2;
    case '*':return num1*num2;
    case '/':return num1/num2;
    default: return -1;
    }
}


public static void main(String args[])
    {
        ComputerFrame demo=new ComputerFrame();
        demo.setSize(300,400);
        demo.show();


     }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 有赏,i卡绘世画不出
    • ¥15 如何用stata画出文献中常见的安慰剂检验图
    • ¥15 c语言链表结构体数据插入
    • ¥40 使用MATLAB解答线性代数问题
    • ¥15 COCOS的问题COCOS的问题
    • ¥15 FPGA-SRIO初始化失败
    • ¥15 MapReduce实现倒排索引失败
    • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
    • ¥15 找一位技术过硬的游戏pj程序员
    • ¥15 matlab生成电测深三层曲线模型代码