+ -
当前位置:首页 → 问答吧 → 计数机习作请教

计数机习作请教

时间:2011-12-04

来源:互联网

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;//用来定义送入数

public class calculator30137452 extends JFrame {//JFrame = vb form

private JPanel displayPanel;// private 限制用法
private JPanel numPanel;// JPanel 控制form area
private JTextField display; // TextBox
private JButton num[]; // Button
private JButton add,min,plu,dir,eq,clear;
private int value = 0;
private int numdata = 0;
private int numdate = 0;
private int numsave = 0;
private int swit = 0;
private int save = 0;
private int out = 0;
private int y[] = new int [10];
private static Panel pnum1=new Panel(new GridLayout(4,3));
private static Panel pnum2=new Panel(new GridLayout(4,3));

public static void main(String args[]){
  calculator30137452 c = new calculator30137452();
  c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭用 = System.exit button版
  c.setSize(220, 170);
  c.setVisible(true);//出现用
  c.setResizable(false);//限制大少 不能变动
  pnum1.setBounds(20,60,90,105);
  pnum2.setBounds(110,60,30,105);
}

public calculator30137452() {
  super("Calculator");
  displayPanel = new JPanel();//新开panel
  displayPanel.setLayout(new GridLayout(1,1));//限制数目
  display = new JTextField(20);//设定textfield最大 数目
  display.setHorizontalAlignment(JTextField.RIGHT);
  display.setEditable(false);//禁止出文字
  display.setText("0");//set字
  displayPanel.add(display);
  add(displayPanel,BorderLayout.NORTH);//控制方位

numPanel = new JPanel();
numPanel.setLayout(new GridLayout (4,4));
num = new JButton[10];
for(int i = 0; i<= 9;i++){
  num[i] = new JButton(Integer.toString);
  num[i].addActionListener(new NumHandler());//ActionListere
  numPanel.add(num[i]);
}

dir = new JButton ("/");
dir.addActionListener(new dir());

plu = new JButton ("*");
plu.addActionListener(new plu());

min = new JButton ("-");
min.addActionListener(new min());

   add = new JButton ("+");
add.addActionListener(new urselist());

   eq = new JButton ("=");
eq.addActionListener(new eq());

   clear = new JButton ("C");
     clear.addActionListener(new ClearHandler());

numPanel.add(num[7]);
numPanel.add(num[8]);
numPanel.add(num[9]);
numPanel.add(dir);
numPanel.add(num[4]);
numPanel.add(num[5]);
numPanel.add(num[6]);
numPanel.add(add);
numPanel.add(num[1]);
numPanel.add(num[2]);
numPanel.add(num[3]);
numPanel.add(plu);
numPanel.add(num[0]);
numPanel.add(clear);
numPanel.add(eq);
numPanel.add(min);

add(numPanel, BorderLayout.SOUTH);
}
private class NumHandler implements ActionListener{
  public void actionPerformed(ActionEvent e){
    value = value * 10 +Integer.parseInt(e.getActionCommand());

    display.setText(Integer.toString(value));//输入用
  }
}
private class ClearHandler implements ActionListener{
  public void actionPerformed(ActionEvent e){
      value = 0;
      numdata = 0;
      numsave = 0;
    display.setText(Integer.toString(value));//输入用
  }
}

private class urselist implements ActionListener{
  public void actionPerformed(ActionEvent e){
    if (value != 0){
      numdata = value;
      numdate = numdata;
      numsave+= numdata;

        value =0;
        numdata = 0;
        swit = 1;
    }
         display.setText(Integer.toString(numsave));//输入用
  }
}
private class min implements ActionListener{
  public void actionPerformed(ActionEvent e){
    if (value!= 0){
      numdata = value;
      numsave-= numdata;

        value =0;
          swit = 2;
    }
         display.setText(Integer.toString(numsave));//输入用
  }
}
private class plu implements ActionListener{
  public void actionPerformed(ActionEvent e){
    if (value!= 0){
      numsave = 1;
      numdata = value;
      numsave*= numdata;

      value =0;
        swit = 3;}
        else {
          numdata = value;
      numsave*= numdata;

      value =0;
        swit = 3;
/*       numdata = value;
      numsave*= numdata;

      value =0;
        swit = 3;*/
    }
         display.setText(Integer.toString(numsave));//输入用
  }
}
private class dir implements ActionListener{
  public void actionPerformed(ActionEvent e){
    if (value!= 0){
      numdata = value;
      numsave/= numdata;
        value =0;

          swit = 4;
    }
         display.setText(Integer.toString(numsave));//输入用
  }
}
   private class eq implements ActionListener{
  public void actionPerformed(ActionEvent e){
if(swit == 1){
  numsave+=numdate;
numdate = 0;
            display.setText(Integer.toString(numsave));
}
else if (swit ==2 ){
    numsave-=numdata;
numdata = 0;
            display.setText(Integer.toString(numsave));
}
else if (swit ==3 ){
    numsave*=numdata;
numdata = 0;
            display.setText(Integer.toString(numsave));
}
else if (swit ==4 ){
    numsave/=numdata;
numdata = 0;
            display.setText(Integer.toString(numsave));
}
//输入用
  }
}
/*Button but =(Button) e.getSource();
if (but == add){
numdata = value;
save =1;
}
else if (but == dir){
   numdata = value;
save =2;
}
else if (but == min){
  numdata = value;
save =3;
}
else if (but == plu){
   numdata = value;
save =4;
}
else if (but ==eq){
   numdata = value;
save =5;
}
switch (save){
  case 1:
    numsave+=numdata;
    break;
    case 2:
      numsave /= numdata;
      break;
      case 3:
        numsave -= numdata;
        break;
        case 4:
          numsave *= numdata;
          break;
          default:
}*/

}

基本数为零时 数目 * / 数出现错误
而且 重覆使用后 数据会自动增加一次

请问是 指令问题 还是我排列问题?

作者: zeromr   发布时间: 2011-12-04

你的错误讯息呢?
张贴程式时请务必使用code标记
这样code才好看

作者: pclevin   发布时间: 2011-12-05

code标记?


整体程式 没问题
能顺利 Process complete

但出来的计算机出现一个奇怪的问题

e.g: 初始数为0
进行任何 * / 数式结果都会变成 0
而且 数据 不能清除上一次输入记录 变成了 数字 自我增值的情况出现= =
但我想了半天都想不到debug的方法

作者: zeromr   发布时间: 2011-12-05

code标记 指的是JAVA WORLD 再贴文或回文 时有个用在贴程式码的标记
是个#号

另外怎会不知如何DEBUG
若是用IDE开发 都有DEBUG模式 这部分请膜拜孤狗大神
还有再不济 你还是可以用print 在相关的程式附近
将值印在console

作者: jk47   发布时间: 2011-12-05