我要做一个实现加减乘除的简单的计算器,现在先不考虑小数点。我做的算出来的结果是错的,不知道怎么改,哪位大哥帮我改一下,要求在我的基础上改,不要改变我的原意,结果正确的一定重谢。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.String.*;
public class calculator
{
public static void main(String[] args)
{
ButtonFrame frame = new ButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}class ButtonFrame extends JFrame
{
public ButtonFrame()
{
setTitle("calculator");
setSize(WIDTH,HEIGHT);
ButtonPanel panel=new ButtonPanel();
Container contentPane=getContentPane();
contentPane.add(panel);
setResizable(false);
}
public static final int WIDTH=300;
public static final int HEIGHT=300;
}class ButtonPanel extends JPanel
{   
    int result=0;
    int num1=0;
    static int j=0;
    static int i=1;
JTextArea area=null;
int a[]=new int[100];
String b[]=new String [50];
public ButtonPanel()
{

     for (int s=0;s<100;s++)
     {
         a[s]=0;
     }
    
        for(int t=0;t<50;t++)
        {
            b[t]="+";
        }
        
area=new JTextArea(1,25);
        area.setEditable(false);
        JScrollPane pane=new JScrollPane(area);
        add(pane);
        System.out.println();
        JButton Button0=new JButton("0");
JButton Button1=new JButton("1");
JButton Button2=new JButton("2");
JButton Button3=new JButton("3");
JButton Button4=new JButton("4");
JButton Button5=new JButton("5");
JButton Button6=new JButton("6");
JButton Button7=new JButton("7");
JButton Button8=new JButton("8");
JButton Button9=new JButton("9");
JButton Button10=new JButton("vc");
    JButton Button11=new JButton("+");
    JButton Button12=new JButton("-");
    JButton Button13=new JButton("*");
    JButton Button14=new JButton("/");
    JButton Button15=new JButton("=");
    add(Button0);
    add(Button1);
    add(Button2);
    add(Button3);
    add(Button4);
    add(Button5);
    add(Button6);
    add(Button7);
    add(Button8);
    add(Button9);
    add(Button10);
    add(Button11);
    add(Button12);
    add(Button13);
    add(Button14);
    add(Button15);     ButtonActionA ButtonAction0=new ButtonActionA("0");
    ButtonActionA ButtonAction1=new ButtonActionA("1");
    ButtonActionA ButtonAction2=new ButtonActionA("2");
    ButtonActionA ButtonAction3=new ButtonActionA("3");
    ButtonActionA ButtonAction4=new ButtonActionA("4");
    ButtonActionA ButtonAction5=new ButtonActionA("5");
    ButtonActionA ButtonAction6=new ButtonActionA("6");
    ButtonActionA ButtonAction7=new ButtonActionA("7");
    ButtonActionA ButtonAction8=new ButtonActionA("8");
    ButtonActionA ButtonAction9=new ButtonActionA("9");
    ButtonActionD ButtonAction10=new ButtonActionD("0");
    ButtonActionB ButtonAction11=new ButtonActionB("+");
    ButtonActionB ButtonAction12=new ButtonActionB("-");
    ButtonActionB ButtonAction13=new ButtonActionB("*");
    ButtonActionB ButtonAction14=new ButtonActionB("/");
    ButtonActionC ButtonAction15=new ButtonActionC("=");
    Button0.addActionListener(ButtonAction0);
    Button1.addActionListener(ButtonAction1);
    Button2.addActionListener(ButtonAction2);
    Button3.addActionListener(ButtonAction3);
    Button4.addActionListener(ButtonAction4);
    Button5.addActionListener(ButtonAction5);
    Button6.addActionListener(ButtonAction6);
    Button7.addActionListener(ButtonAction7);
    Button8.addActionListener(ButtonAction8);
    Button9.addActionListener(ButtonAction9);
    Button10.addActionListener(ButtonAction10);
    Button11.addActionListener(ButtonAction11);
    Button12.addActionListener(ButtonAction12);
    Button13.addActionListener(ButtonAction13);
    Button14.addActionListener(ButtonAction14);
    Button15.addActionListener(ButtonAction15);
    
}
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    area.setText(ButtonText);
        System.out.println();
    }
    private class ButtonActionA implements ActionListener //
    {
        public ButtonActionA(String text) 
        {
            clicktext = text;
        }
        public void actionPerformed(ActionEvent event)
        {
         //ButtonText=clicktext;
         //repaint();
         /*int count=0;
         if (count==0)
         {
          ButtonText=clicktext;
          rapain();
          count++;
         }
         if()*/
             
         
             
          ////
          num1=(num1*10)+Integer.parseInt(clicktext);
         
          ButtonText =new String(num1+"");
          a[i]=num1;
          i++;
          repaint();
          String string=ButtonText;
          if(string.startsWith("0"))
          {
          ButtonText=clicktext;
          }
           if (! ButtonText.matches("^\\d")) 
           { //这样也可以判断
                        ButtonText = ButtonText.replaceAll("^\\D*", "");
                 }
   
         
         
         
         
    
        }
        private String clicktext="0";
    }
    public String ButtonText="0";
    private class ButtonActionB implements ActionListener//Ӽ˳
    {
     public ButtonActionB(String text) 
        {
            clicktext = text;
        }
        public void actionPerformed(ActionEvent event)
        {
        
        
         ButtonText=clicktext;
         repaint();
         b[j]=clicktext;
         j++;
         num1=0;
        
        
        }
        private String clicktext="0";
    }
    private class ButtonActionC implements ActionListener//
    {
     public ButtonActionC(String text) 
        {
            clicktext = text;
        }
        public void actionPerformed(ActionEvent event)
        {
        
         if(b[j-1]=="+")
         {
         result=a[i-1]+a[i-2];
         }
         if(b[j-1]=="-")
         {
         result=a[i-1]-a[i-2];
         }
         if(b[j-1]=="*")
         {
         result=a[i-1]*a[i-2];
         }
         if(b[j-1]=="/")
         {
         result=a[i-1]/a[i-2];
        
         }
         num1=0;
         a[i]=result;
         i++;
         ButtonText=new String(result+"");
         repaint();
        
        }
        //ButtonText=new String("0"+"");
        private String clicktext="0";
        
    }
    private class ButtonActionD implements ActionListener//
    {
     public ButtonActionD(String text) 
        {
            clicktext = text;
        }
        public void actionPerformed(ActionEvent event)
        {
         for (int m=0;m<100;m++)
         {
             a[m]=0;
         }
            for(int n=0;n<50;n++)
            {
                b[n]="+";
            }
            result=0;
            ButtonText="0";
            
            repaint();
            
        }
    }
    private String clicktext="0";
}        

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class calculator {
    public static void main(String[] args) {
    ButtonFrame frame = new ButtonFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // frame.show();
    // 过时了
    frame.setVisible(true);
    }
    }class ButtonFrame extends JFrame { private static final long serialVersionUID = 1L; public ButtonFrame() {
    setTitle("calculator");
    setSize(WIDTH, HEIGHT);
    ButtonPanel panel = new ButtonPanel();
    Container contentPane = getContentPane();
    contentPane.add(panel);
    setResizable(false);
    } public static final int WIDTH = 300;
    public static final int HEIGHT = 300;
    }class ButtonPanel extends JPanel { private static final long serialVersionUID = 1L;
    int result = 0;
    int num1 = 0;
    static int j = 0;
    static int i = 1;
    JTextArea area = null;
    int a[] = new int[100];
    String b[] = new String[50]; public ButtonPanel() { for (int s = 0; s < 100; s++) {
    a[s] = 0;
    } for (int t = 0; t < 50; t++) {
    b[t] = "+";
    } area = new JTextArea(1, 25);
    area.setEditable(false);
    JScrollPane pane = new JScrollPane(area);
    add(pane);
    System.out.println();
    JButton Button0 = new JButton("0");
    JButton Button1 = new JButton("1");
    JButton Button2 = new JButton("2");
    JButton Button3 = new JButton("3");
    JButton Button4 = new JButton("4");
    JButton Button5 = new JButton("5");
    JButton Button6 = new JButton("6");
    JButton Button7 = new JButton("7");
    JButton Button8 = new JButton("8");
    JButton Button9 = new JButton("9");
    JButton Button10 = new JButton("vc");
    JButton Button11 = new JButton("+");
    JButton Button12 = new JButton("-");
    JButton Button13 = new JButton("*");
    JButton Button14 = new JButton("/");
    JButton Button15 = new JButton("=");
    add(Button0);
    add(Button1);
    add(Button2);
    add(Button3);
    add(Button4);
    add(Button5);
    add(Button6);
    add(Button7);
    add(Button8);
    add(Button9);
    add(Button10);
    add(Button11);
    add(Button12);
    add(Button13);
    add(Button14);
    add(Button15); ButtonActionA ButtonAction0 = new ButtonActionA("0");
    ButtonActionA ButtonAction1 = new ButtonActionA("1");
    ButtonActionA ButtonAction2 = new ButtonActionA("2");
    ButtonActionA ButtonAction3 = new ButtonActionA("3");
    ButtonActionA ButtonAction4 = new ButtonActionA("4");
    ButtonActionA ButtonAction5 = new ButtonActionA("5");
    ButtonActionA ButtonAction6 = new ButtonActionA("6");
    ButtonActionA ButtonAction7 = new ButtonActionA("7");
    ButtonActionA ButtonAction8 = new ButtonActionA("8");
    ButtonActionA ButtonAction9 = new ButtonActionA("9");
    ButtonActionD ButtonAction10 = new ButtonActionD("0");
    ButtonActionB ButtonAction11 = new ButtonActionB("+");
    ButtonActionB ButtonAction12 = new ButtonActionB("-");
    ButtonActionB ButtonAction13 = new ButtonActionB("*");
    ButtonActionB ButtonAction14 = new ButtonActionB("/");
    ButtonActionC ButtonAction15 = new ButtonActionC("=");
    Button0.addActionListener(ButtonAction0);
    Button1.addActionListener(ButtonAction1);
    Button2.addActionListener(ButtonAction2);
    Button3.addActionListener(ButtonAction3);
    Button4.addActionListener(ButtonAction4);
    Button5.addActionListener(ButtonAction5);
    Button6.addActionListener(ButtonAction6);
    Button7.addActionListener(ButtonAction7);
    Button8.addActionListener(ButtonAction8);
    Button9.addActionListener(ButtonAction9);
    Button10.addActionListener(ButtonAction10);
    Button11.addActionListener(ButtonAction11);
    Button12.addActionListener(ButtonAction12);
    Button13.addActionListener(ButtonAction13);
    Button14.addActionListener(ButtonAction14);
    Button15.addActionListener(ButtonAction15); } public void paintComponent(Graphics g) {
    super.paintComponent(g);
    area.setText(ButtonText);
    System.out.println();
    } private class ButtonActionA implements ActionListener //
    {
    public ButtonActionA(String text) {
    clicktext = text;
    } public void actionPerformed(ActionEvent event) {
    // ButtonText=clicktext;
    // repaint();
    /*
     * int count=0; if (count==0) { ButtonText=clicktext; rapain();
     * count++; } if()
     */ // //
    num1 = (num1 * 10) + Integer.parseInt(clicktext); ButtonText = new String(num1 + "");
    a[i] = num1;
    i++;
    repaint();
    String string = ButtonText;
    if (string.startsWith("0")) {
    ButtonText = clicktext;
    }
    if (!ButtonText.matches("^\\d")) { // 这样也可以判断
    ButtonText = ButtonText.replaceAll("^\\D*", "");
    } } private String clicktext = "0";
    } public String ButtonText = "0"; private class ButtonActionB implements ActionListener// Ӽ˳
    {
    public ButtonActionB(String text) {
    clicktext = text;
    } public void actionPerformed(ActionEvent event) { ButtonText = clicktext;
    repaint();
    b[j] = clicktext;
    j++;
    num1 = 0; } private String clicktext = "0";
    } private class ButtonActionC implements ActionListener//
    {
    public ButtonActionC(String text) {
    clicktext = text;
    } public void actionPerformed(ActionEvent event) { if (b[j - 1] == "+") {
    result = a[i - 1] + a[i - 2];
    }
    if (b[j - 1] == "-") {
    result = a[i - 1] - a[i - 2];
    }
    if (b[j - 1] == "*") {
    result = a[i - 1] * a[i - 2];
    }
    if (b[j - 1] == "/") {
    result = a[i - 1] / a[i - 2]; }
    num1 = 0;
    a[i] = result;
    i++;
    ButtonText = new String(result + "");
    repaint(); } // ButtonText=new String("0"+"");
    @SuppressWarnings("unused")
    private String clicktext = "0"; } private class ButtonActionD implements ActionListener//
    {
    public ButtonActionD(String text) {
    clicktext = text;
    } public void actionPerformed(ActionEvent event) {
    for (int m = 0; m < 100; m++) {
    a[m] = 0;
    }
    for (int n = 0; n < 50; n++) {
    b[n] = "+";
    }
    result = 0;
    ButtonText = "0"; repaint(); }
    } @SuppressWarnings("unused")
    private String clicktext = "0";
    }一步计算都没错的!你连续计算就会错,你没有连续计算的方法!
      

  2.   

    package cn.tisson.test;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Calculator extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JTextField txtResult;
    private JButton btnZero, btnOne, btnTwo, btnThree, btnFour, btnFive,
    btnSix, btnSeven, btnEight, btnNine, btnPlus, btnMinus, btnTimes,
    btnDivided, btnEqual, btnPoint, btnC, btnCE, btnSqrt, btnPlusMinus;
    int z;
    double x, y;
    StringBuffer str; public Calculator() {
    super("计算器");
    this.setSize(311, 231);
    this.setLocation(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new GridLayout(1, 1));// 网格布局
    JPanel panel = new JPanel(new GridLayout(6, 1));// 面板 网格布局6行1列
    this.add(panel); txtResult = new JTextField("0");
    Color BackColor = new Color(255, 255, 255);
    Color ForeColor = new Color(0, 0, 0);
    txtResult.setBackground(BackColor);
    txtResult.setForeground(ForeColor); panel.add(txtResult);
    txtResult.setHorizontalAlignment(JTextField.RIGHT);
    txtResult.setEnabled(false);
    // text.setEnabled(true); JPanel panel_1 = new JPanel(new GridLayout(1, 4));
    panel.add(panel_1); btnSqrt = new JButton("sqrt");
    panel_1.add(btnSqrt);
    btnSqrt.addActionListener(this);
    btnPlusMinus = new JButton("+/-");
    panel_1.add(btnPlusMinus);
    btnPlusMinus.addActionListener(this);
    btnCE = new JButton("CE");
    panel_1.add(btnCE);
    btnCE.addActionListener(this);
    btnC = new JButton("C");
    panel_1.add(btnC);
    btnC.addActionListener(this); JPanel panel_2 = new JPanel(new GridLayout(1, 4));
    panel.add(panel_2); btnSeven = new JButton("7");
    panel_2.add(btnSeven);
    btnSeven.addActionListener(this);
    btnEight = new JButton("8");
    panel_2.add(btnEight);
    btnEight.addActionListener(this);
    btnNine = new JButton("9");
    panel_2.add(btnNine);
    btnNine.addActionListener(this);
    btnDivided = new JButton("/");
    panel_2.add(btnDivided);
    btnDivided.addActionListener(this); JPanel panel_3 = new JPanel(new GridLayout(1, 4));
    panel.add(panel_3); btnFour = new JButton("4");
    panel_3.add(btnFour);
    btnFour.addActionListener(this);
    btnFive = new JButton("5");
    panel_3.add(btnFive);
    btnFive.addActionListener(this);
    btnSix = new JButton("6");
    panel_3.add(btnSix);
    btnSix.addActionListener(this);
    btnTimes = new JButton("*");
    panel_3.add(btnTimes);
    btnTimes.addActionListener(this); JPanel panel_4 = new JPanel(new GridLayout(1, 4));
    panel.add(panel_4); btnOne = new JButton("1");
    panel_4.add(btnOne);
    btnOne.addActionListener(this);
    btnTwo = new JButton("2");
    panel_4.add(btnTwo);
    btnTwo.addActionListener(this);
    btnThree = new JButton("3");
    panel_4.add(btnThree);
    btnThree.addActionListener(this);
    btnMinus = new JButton("-");
    panel_4.add(btnMinus);
    btnMinus.addActionListener(this); JPanel panel_5 = new JPanel(new GridLayout(1, 4));
    panel.add(panel_5); btnZero = new JButton("0");
    panel_5.add(btnZero);
    btnZero.addActionListener(this);
    btnPoint = new JButton(".");
    panel_5.add(btnPoint);
    btnPoint.addActionListener(this);
    btnEqual = new JButton("=");
    panel_5.add(btnEqual);
    btnEqual.addActionListener(this);
    btnPlus = new JButton("+");
    panel_5.add(btnPlus);
    btnPlus.addActionListener(this); str = new StringBuffer(); this.setVisible(true); } public void windowClosing(WindowEvent a) {
    System.exit(0);
    } public void actionPerformed(ActionEvent e) { try {
    if (e.getSource() == btnC) {
    txtResult.setText("0");
    str.setLength(0);
    } else if (e.getSource() == btnCE) {
    txtResult.setText("0.");
    str.setLength(0);
    } else if (e.getSource() == btnPlusMinus) {
    x = Double.parseDouble(txtResult.getText().trim());
    txtResult.setText("" + (-x));
    } else if (e.getSource() == btnPlus) {
    x = Double.parseDouble(txtResult.getText().trim());
    str.setLength(0);
    y = 0d;
    z = 1;
    } else if (e.getSource() == btnMinus) {
    x = Double.parseDouble(txtResult.getText().trim());
    str.setLength(0);
    y = 0d;
    z = 2;
    } else if (e.getSource() == btnTimes) {
    x = Double.parseDouble(txtResult.getText().trim());
    str.setLength(0);
    y = 0d;
    z = 3;
    } else if (e.getSource() == btnDivided) {
    x = Double.parseDouble(txtResult.getText().trim());
    str.setLength(0);
    y = 0d;
    z = 4;
    } else if (e.getSource() == btnEqual) {
    str.setLength(0);
    switch (z) {
    case 1:
    txtResult.setText("" + (x + y));
    break;
    case 2:
    txtResult.setText("" + (x - y));
    break;
    case 3:
    txtResult.setText("" + (x * y));
    break;
    case 4:
    txtResult.setText("" + (x / y));
    break;
    }
    } else if (e.getSource() == btnPoint) {
    if (txtResult.getText().trim().indexOf('.') != -1)// 判断字符串中是否已经包含了小数点
    { } else// 如果没数点有小
    {
    if (txtResult.getText().trim().equals("0"))// 如果初时显示为0
    {
    str.setLength(0);
    txtResult.setText((str.append("0"
    + e.getActionCommand())).toString());
    } else if (txtResult.getText().trim().equals(""))// 如果初时显示为空则不做任何操作
    {
    } else {
    txtResult.setText(str.append(e.getActionCommand())
    .toString());
    }
    } y = 0d;
    } else if (e.getSource() == btnSqrt)// 求平方根
    {
    x = Double.parseDouble(txtResult.getText().trim());
    txtResult.setText("数字格式异常");
    if (x < 0)
    txtResult.setText("负数没有平方根");
    else
    txtResult.setText("" + Math.sqrt(x));
    str.setLength(0);
    y = 0d;
    } else if (e.getSource() == btnZero)// 如果选择的是"0"这个数字键
    {
    if (txtResult.getText().trim().equals("0"))// 如果显示屏显示的为零不做操作
    {
    } else {
    txtResult.setText(str.append(e.getActionCommand())
    .toString());
    y = Double.parseDouble(txtResult.getText().trim());
    }
    } else// 其他的数字键
    {
    txtResult.setText(str.append(e.getActionCommand()).toString());
    y = Double.parseDouble(txtResult.getText().trim());
    }
    } catch (NumberFormatException ae) {
    txtResult.setText("数字格式异常");
    } catch (StringIndexOutOfBoundsException ae) {
    txtResult.setText("字符串索引越界");
    } } public static void main(String arg[]) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    e.printStackTrace();

    new Calculator();
    }}
    LZ可以参考下~
      

  3.   

    错误还是有的,那个计算的方法有错,比如输入123,a[0]=1,a[1]=12,a[2]=123,j计算的时候就出错了
      

  4.   

    [email protected]
    http://debugs.tk/
    想知道为什么就联系我