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

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();


     }
  • 写回答

1条回答 默认 最新

  • YXTS122 2017-04-23 07:30
    关注

    具体是在什么地方报错了。。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?