A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是一个简单计算器的模拟程序,但是不能输入两位以上数,也就是不能做两位数以上的运行,求高手解答
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;

  4. class CalButtonPane extends JPanel implements ActionListener{
  5.                  String[] keys={"7","8","9","/",
  6.                                                  "4","5","6","*",
  7.                                                  "1","2","3","-",
  8.                                                  "0",".","=","+"};
  9.                  JButton[] keyb=new JButton[keys.length];
  10.                  JTextField t;
  11.                  JButton clear;
  12.                  double result=0,num,sum;
  13.                  int i=0,j=0,action;
  14.                  CalButtonPane(JTextField t,JButton clear){
  15.                          super(new GridLayout(4,4,4,4));
  16.                          this.t=t;
  17.                          this.clear=clear;
  18.                          for(int i=0;i<keys.length;i++)
  19.                          {
  20.                                  keyb[i]=new JButton(keys[i]);
  21.                                  keyb[i].addActionListener(this);
  22.                                  this.add(keyb[i]);
  23.                          }
  24.                          clear.addActionListener(this);
  25.                  }
  26.                  public void actionPerformed(ActionEvent e){
  27.                          JButton o=(JButton)e.getSource();
  28.                          String s=o.getText();
  29.                          char c=s.charAt(0);
  30.                          num=Double.parseDouble(t.getText());
  31.                          if(c=='+')
  32.                          {
  33.                                  if(j==0)sum=num;
  34.                                  else if(action==1)sum+=num;
  35.                                  t.setText(sum+"");
  36.                                  j++;i=0;action=1;
  37.                          }
  38.                          else if(c=='-'){
  39.                                  if(j==0)sum=num;
  40.                                  else if(action==2)sum-=num;
  41.                                  t.setText(sum+"");
  42.                                  j++;i=0;action=2;
  43.                          }
  44.                          else if(c=='*'){
  45.                                  if(j==0)sum=num;
  46.                                  else if(action==3)sum*=num;
  47.                                  t.setText(sum+"");
  48.                                  j++;i=0;action=3;
  49.                          }
  50.                          else if(c=='/'){
  51.                                  if(j==0)sum=num;
  52.                                  else if(action==4)sum/=num;
  53.                                  t.setText(sum+"");
  54.                                  j++;i=0;action=4;
  55.                          }
  56.                          else if(c=='=')
  57.                          {
  58.                                  switch(action){
  59.                                  case 1:t.setText((sum+=num)+"");break;
  60.                                  case 2:t.setText((sum-=num)+"");break;
  61.                                  case 3:t.setText((sum*=num)+"");break;
  62.                                  case 4:t.setText((sum/=num)+"");break;
  63.                                  }
  64.                                  t.setText(sum+"");
  65.                                  i=0;j=0;action=0;
  66.                          }
  67.                          else if(c=='.')
  68.                          {
  69.                                  if(t.getText().indexOf(".")==-1)
  70.                                          t.setText(t.getText()+c);
  71.                          }
  72.                          else if(c=='C'){
  73.                                  i=0;j=0;sum=0;action=0;
  74.                                  t.setText("0");
  75.                          }
  76.                          else
  77.                          {
  78.                                  System.out.println(i);
  79.                                  if(i==0)t.setText("");
  80.                                  t.setText(t.getText()+c);
  81.                         }
  82.                  }
  83.         }
  84. public class Calculator extends JFrame{
  85.         CalButtonPane cp;
  86.         Calculator() {
  87.                 super("java计算器");
  88.                 setDefaultCloseOperation(EXIT_ON_CLOSE);
  89.                 init();
  90.                 Container c=getContentPane();
  91.                 c.setLayout(new BorderLayout());
  92.                 c.add(cp,"Center");
  93.                 c.add(cp.t,"North");
  94.                 c.add(cp.clear,"South");
  95.                 this.setLocation(300,200);
  96.                 this.pack();
  97.                 this.setResizable(false );
  98.                 this.setVisible(true);
  99.                
  100.         }
  101.         void init(){
  102.                 JTextField t=new JTextField("0.0");
  103.                 t.setHorizontalAlignment(JTextField.RIGHT);//设置文本的水平对齐方式。
  104.                
  105.                 JButton clear=new JButton("Clear");
  106.                 cp=new CalButtonPane(t,clear);
  107.         }

  108.        
  109.         public static void main(String[] args) {
  110.                 new Calculator();
  111.         }

  112. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

1 个回复

倒序浏览
楼主 不厚道,一句注释也没有!!
我不是很清楚你的标志位都是做什么用的,自己跟着感觉给你改了一个填了一个! 凑合着看吧,应该能看懂
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;

  4. class CalButtonPane extends JPanel implements ActionListener{
  5.                  String[] keys={"7","8","9","/",
  6.                                                  "4","5","6","*",
  7.                                                  "1","2","3","-",
  8.                                                  "0",".","=","+"};
  9.                  JButton[] keyb=new JButton[keys.length];
  10.                  JTextField t;
  11.                  JButton clear;
  12.                  double result=0,num,sum;
  13.                  int i=1,j=0,action,k=0;//i j 为标记符i=1表示按下了计算按钮,文本框要置0,
  14.                  CalButtonPane(JTextField t,JButton clear){
  15.                          super(new GridLayout(4,4,4,4));
  16.                          this.t=t;
  17.                          this.clear=clear;
  18.                          for(int i=0;i<keys.length;i++)
  19.                          {
  20.                                  keyb[i]=new JButton(keys[i]);
  21.                                  keyb[i].addActionListener(this);
  22.                                  this.add(keyb[i]);
  23.                          }
  24.                          clear.addActionListener(this);
  25.                  }
  26.                  public void actionPerformed(ActionEvent e){
  27.                          JButton o=(JButton)e.getSource();
  28.                          String s=o.getText();
  29.                          char c=s.charAt(0);
  30.                          num=Double.parseDouble(t.getText());
  31.                          if(c=='+')
  32.                          {
  33.                                  if(j==0)sum=num;
  34.                                  else if(action==1)sum+=num;
  35.                                  t.setText(sum+"");
  36.                                  j++;i=0;action=1;
  37.                          }
  38.                          else if(c=='-'){
  39.                                  if(j==0)sum=num;
  40.                                  else if(action==2)sum-=num;
  41.                                  t.setText(sum+"");
  42.                                  j++;i=0;action=2;
  43.                          }
  44.                          else if(c=='*'){
  45.                                  if(j==0)sum=num;
  46.                                  else if(action==3)sum*=num;
  47.                                  t.setText(sum+"");
  48.                                  j++;i=0;action=3;
  49.                          }
  50.                          else if(c=='/'){
  51.                                  if(j==0)sum=num;
  52.                                  else if(action==4)sum/=num;
  53.                                  t.setText(sum+"");
  54.                                  j++;i=0;action=4;
  55.                          }
  56.                          else if(c=='=')
  57.                          {
  58.                                  switch(action){
  59.                                  case 1:t.setText((sum+=num)+"");break;
  60.                                  case 2:t.setText((sum-=num)+"");break;
  61.                                  case 3:t.setText((sum*=num)+"");break;
  62.                                  case 4:t.setText((sum/=num)+"");break;
  63.                                  }
  64.                                  t.setText(sum+"");
  65.                                 // i=1;j=0;action=0;  按下等号后 让标志位i置零,表示一次计算结束
  66.                                  i=0;j=0;action=0;
  67.                          }
  68.                          else if(c=='.')
  69.                          {
  70.                                  if(t.getText().indexOf(".")==-1)
  71.                                          t.setText(t.getText()+c);
  72.                          }
  73.                          else if(c=='C'){
  74.                                  i=0;j=0;sum=0;action=0;
  75.                                  t.setText("0");
  76.                          }
  77.                          else
  78.                          {
  79.                                  System.out.println(i);
  80.                                 
  81.                                  if(i==0 || k==0)t.setText("");//若 标志位 k=0  表示输入第一个数字, 因为 默认显示  0.0 不判断 会直接加在后面
  82.                                  i=1;k=1;
  83.                                  t.setText(t.getText()+c);
  84.                         }
  85.                  }
  86.         }
  87. public class Calculator extends JFrame{
  88.         CalButtonPane cp;
  89.         Calculator() {
  90.                 super("java计算器");
  91.                 setDefaultCloseOperation(EXIT_ON_CLOSE);
  92.                 init();
  93.                 Container c=getContentPane();
  94.                 c.setLayout(new BorderLayout());
  95.                 c.add(cp,"Center");
  96.                 c.add(cp.t,"North");
  97.                 c.add(cp.clear,"South");
  98.                 this.setLocation(300,200);
  99.                 this.pack();
  100.                 this.setResizable(false );
  101.                 this.setVisible(true);
  102.                
  103.         }
  104.         void init(){
  105.                 JTextField t=new JTextField("0.0");
  106.                 t.setHorizontalAlignment(JTextField.RIGHT);//设置文本的水平对齐方式。
  107.                
  108.                 JButton clear=new JButton("Clear");
  109.                 cp=new CalButtonPane(t,clear);
  110.         }

  111.         
  112.         public static void main(String[] args) {
  113.                 new Calculator();
  114.         }

  115. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马