谁能不能把这段代码给仔细的说明一下吗?谢谢大家了!import java.awt.*;
import java.awt.event.*;
public class Calculator extends WindowAdapter implements ActionListener
{
private double result=0,data1=0,radixPointDepth=1;
private boolean radixPointIndicate=false,resultIndicate=false;
private char prec='+';
private Frame f;
private TextField tf;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;
private Panel p;
static public void main(String args[])
{
Calculator de=new Calculator();
de.go();
}
public void go()
{
f=new Frame("计算器");
p=new Panel();
p.setLayout(new GridLayout(4,4));
tf=new TextField(30);
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North");
f.add(p,"Center");
f.add(b17,"South");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
f.addWindowListener(this);
f.setSize(250,190);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String s;
s=e.getActionCommand();
switch(s.charAt(0))
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(resultIndicate)
{
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate)
{
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
}
else
{
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(displayNumber.toString());
resultIndicate=false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0)!='='&&resultIndicate)
{
prec=s.charAt(0);
resultIndicate=false;
}
else
{
switch(prec)
{
case '+':
result=result+data1;
break;
case '-':
result=result-data1;
break;
case '*':
result=result*data1;
break;
case '/':
result=result/data1;
break;
}
}
radixPointIndicate=false;
radixPointDepth=1;
displayNumber=new Double(result);
tf.setText(displayNumber.toString());
if(s.charAt(0)!='=')
{
data1=0;
prec=s.charAt(0);
}
else
{
resultIndicate=true;
}
break;
case '.':
radixPointIndicate=true;
break;
}
if(s.equals("清零"))
{
result=0;
data1=0;
radixPointDepth=1;
tf.setText("");
}
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}

解决方案 »

  1.   

    我没去看它的算法...水平太差...只是加些自己能了解的注释
    ____________________________________________________________________
    import java.awt.*;
    import java.awt.event.*;
    /*计算器的窗口应用程序*/
    public class Calculator extends WindowAdapter implements ActionListener
    {
    /* @result 结果   */
    /* @data1  中间数   */
    /* @radixPointDepth 不明白*/
    /*radixPointIndicate=false,resultIndicate=false
    估计是计算符号是否选了吧..第二个是结果计算出来没
    */private double result=0,data1=0,radixPointDepth=1;
    private boolean radixPointIndicate=false,resultIndicate=false;
    private char prec='+';    //这里把它当连接符号还是计算符号啊?
    private Frame f;          //窗口
    private TextField tf;     //文本输入框
    /*一些按钮*/
    private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;  
    /*容器*/
    private Panel p;
    /*程序入口*/
    static public void main(String args[])
    {
    //这....
    Calculator de=new Calculator();
    de.go();
    }
    public void go()
    {
    /*初始化*/
    f=new Frame("计算器");
    p=new Panel();
    p.setLayout(new GridLayout(4,4));   //设置Panel的布局方式为网格4X4
    tf=new TextField(30);               //初始化文本输入框
    /*初始化计算器的一些按钮,根据传进去的标识理解*/
    b1=new Button("7"); 
    b2=new Button("8");
    b3=new Button("9");
    b4=new Button("+");
    b5=new Button("4");
    b6=new Button("5");
    b7=new Button("6");
    b8=new Button("-");
    b9=new Button("1");
    b10=new Button("2");
    b11=new Button("3");
    b12=new Button("*");
    b13=new Button("0");
    b14=new Button(".");
    b15=new Button("=");
    b16=new Button("/");
    b17=new Button("清零");
    /*往窗口里放Panel <p>..输入文本框<tf> 清0的按钮 <b17>*/
    f.add(tf,"North");
    f.add(p,"Center");
    f.add(b17,"South");
    /*望在窗口CENTER的Panel里加按钮*/
    p.add(b1);
    p.add(b2);
    p.add(b3);
    p.add(b4);
    p.add(b5);
    p.add(b6);
    p.add(b7);
    p.add(b8);
    p.add(b9);
    p.add(b10);
    p.add(b11);
    p.add(b12);
    p.add(b13);
    p.add(b14);
    p.add(b15);
    p.add(b16);
    /*给每个按钮加事件监听*/
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    b4.addActionListener(this);
    b5.addActionListener(this);
    b6.addActionListener(this);
    b7.addActionListener(this);
    b8.addActionListener(this);
    b9.addActionListener(this);
    b10.addActionListener(this);
    b11.addActionListener(this);
    b12.addActionListener(this);
    b13.addActionListener(this);
    b14.addActionListener(this);
    b15.addActionListener(this);
    b16.addActionListener(this);
    b17.addActionListener(this);
    /*给窗口加监听*/
    f.addWindowListener(this);
    /*窗口大小*/
    f.setSize(250,190);
    /*显示出窗口 */
    f.setVisible(true);
    }
    public void actionPerformed(ActionEvent e)
    {
    String s;
        /*一但按了按钮后..得到那个按钮*/
    s=e.getActionCommand();
    switch(s.charAt(0))   
    {
    /*如果按的为0-9 数字*/
    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
    /*判断是否已经有结果了*/
    if(resultIndicate)
    {
     
    result=0;  //把结果为0
    data1=0;   //把中间数为0
     prec='+'; //符号为+
    }
    Integer Int1=new Integer(s);   //Int 包装类
    if(radixPointIndicate)
    {
    radixPointDepth=radixPointDepth/10;
    data1=data1+(Int1.intValue())*radixPointDepth;
    }
    else
    {
    data1=data1*10+(Int1.intValue());
    }
    Double displayNumber=new Double(data1);
    tf.setText(displayNumber.toString());
    resultIndicate=false;
    break;
    /*如果按了运算符号*/
    case '+': case '-':case '*':case '/':case '=':
    /*如果没有按= 号 而且计算结果没出来*/
    if(s.charAt(0)!='='&&resultIndicate)
    {
    //得到它按的
    prec=s.charAt(0);
    //设置没有结果指示器
    resultIndicate=false;
    }
    /*接上 那么判断它按的符号根据符号计算结果*/
    else
    {
    switch(prec)
    {
    case '+':
    result=result+data1;
    break;
    case '-':
    result=result-data1;
    break;
    case '*':
    result=result*data1;
    break;
    case '/':
    result=result/data1;
    break;
    }
    }
    radixPointIndicate=false;
    radixPointDepth=1;
    displayNumber=new Double(result);tf.setText(displayNumber.toString());
    if(s.charAt(0)!='=')
    {
    data1=0;
    prec=s.charAt(0);
    }
    else
    {
    resultIndicate=true;
    }
    break;
    case '.':
    radixPointIndicate=true;
    break;
    }
    if(s.equals("清零"))
    {
    result=0;
    data1=0;
    radixPointDepth=1;
    tf.setText("");
    }
    }
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    }
      

  2.   

    这个代码写的不是很严禁,少了很多判断,你只需要了解下面几个知识点就可以了,1楼有注释我不重复了
    1.创建按钮(以后你用其他的IDE完全可以不掌握,这里了解一下就可以了JBUILDER,ECLIPSE都可以拖放控件)
    2.添加按钮到容器(了解即可,注意的是按钮不可以直接放到窗体上)
    3.添加按钮的监听事件(了解即可JBUILDER,ECLIPSE都是自动添加的)
    4.case判断(这个对你以后写程序有点帮助的)
      

  3.   

    谢谢楼上的purity(我要练E语),很感谢!!!!!
      

  4.   

    Integer Int1=new Integer(s);   //Int 包装类
    if(radixPointIndicate)
    {
    radixPointDepth=radixPointDepth/10;
    data1=data1+(Int1.intValue())*radixPointDepth;
    }
    else
    {
    data1=data1*10+(Int1.intValue());
    }
    Double displayNumber=new Double(data1);
    tf.setText(displayNumber.toString());
    resultIndicate=false;
    break;
    这段码谁能帮我解释一下呀?
      

  5.   

    Integer Int1=new Integer(s);   //Int 包装类
    if(radixPointIndicate)//判断当点击的是小数点的时候执行下面的代码
    {
    radixPointDepth=radixPointDepth/10;//将新录入的数字除以10
    data1=data1+(Int1.intValue())*radixPointDepth;//将得到的数字与原数字相加(意思就是上次输入的是1,按了小数点后再输入1,就是1+1/10正好是1.1)
    }
    else
    {
    data1=data1*10+(Int1.intValue());//将上一次输入的数字*10+新输入的数字(意思就是上次输入的是1再输入个1就变成1*10+1正好是11)
    }
    Double displayNumber=new Double(data1);
    tf.setText(displayNumber.toString());
    resultIndicate=false;
    break;