看到,windows自带的计算器不错。。
   想用java写个,看起来挺简单。
   连加,连减实现起来还是挺麻烦的!!
  发帖,感慨下!!

解决方案 »

  1.   

    努力ing...
    偶正在ing...
    做完给你看看.发现自己做的...有很多冗余代码.
    应该有更好的解决方法.
    期待ing...你的.
    给我留下你的邮箱吧.
    一起努力.
      

  2.   

    还是给我发邮件吧.
    我很少来这里的.
    Email:[email protected]
      

  3.   

    imA(男的不会,会的不男) ( ) 信誉:5    Blog  2006-12-8 13:35:03  得分: 0   
       
    呵呵。
    语法编译器,压栈、出栈。  ==========
    Windows那个没有那么麻烦!
    因为它没有表达式,用些标志记录一下状态就OK了的
     
      

  4.   

    我也做了一个,是APPLET的,编译的时候没问题,不过在运行时老是不停的闪动,让我很是郁闷,先把静态的版面贴出来大家看看,那里有问题了
    刚编的计算器界面程序,不知道为什么在IE 中老是跳个不停原码如下:
    import java.awt.*;
    import java.applet.Applet;
    public class calculator extends Applet
    {
    private Button makeButton(String label,Color color){
    Button b=new Button(label);
    b.setBackground(color);
    b.setFont(new Font("Courier",Font.BOLD,10));
    return b;
    }
    private Panel makePanel(LayoutManager lm,Color c){
    Panel p=new Panel();
    p.setLayout(lm);
    p.setBackground(c);
    return p;
    }
    private void makeButtons(){
    Color lightRed=new Color(255,100,100);
    Color lightBlue=new Color(100,100,255);
    Color yellow=new Color(255,255,0);
    c=makeButton("C",lightRed);
    eq=makeButton("=",lightBlue);
    div=makeButton("/",lightBlue);
    times=makeButton("*",lightBlue);
    d7=makeButton("7",yellow);
    d8=makeButton("8",yellow);
    d9=makeButton("9",yellow);
    minue=makeButton("-",lightBlue);
    d4=makeButton("4",yellow);
    d5=makeButton("5",yellow);
    d6=makeButton("6",yellow);
    plus=makeButton("+",lightBlue);
    d1=makeButton("1",yellow);
    d2=makeButton("2",yellow);
    d3=makeButton("3",yellow);
    d0=makeButton("0",yellow);
    dp=makeButton(".",yellow);
    eq2=makeButton("=",lightBlue);
    }
    public void init(){
    background=new Color(200,255,255);
    this.setLayout(new FlowLayout(FlowLayout.CENTER,4,1));
    result=new Label("0.00000",Label.RIGHT);
    result.setBackground(new Color(255,255,255));
    add(result);
    makeButtons();
    row1=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
    row1.add(c);
    row1.add(eq);
    row1.add(times);
    row2=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
    row2.add(d7);
    row2.add(d8);
    row2.add(d9);
    row2.add(minue);
    row3=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
    row3.add(d4);
    row3.add(d5);
    row3.add(d6);
    row3.add(plus);
    add(row1);
    add(row2);
    add(row3);
    p12=makePanel(new BorderLayout(2,2),background);
    p12.add("West",d1);
    p12.add("East",d2);
    p120=makePanel(new BorderLayout(2,2),background);
    p120.add("North",p12);
    p120.add("South",d0);
    p3p=makePanel(new BorderLayout(2,2),background);
    p3p.add("North",d3);
    p3p.add("South",dp);
    p3peq=makePanel(new BorderLayout(2,2),background);
    p3peq.add("West",p3p);
    p3peq.add("East",eq2);
    add(p120);
    add(p3peq);
    setBackground(background);
    }
    public void paint(Graphics g){
    resize(row1.getWidth(),8*d1.getHeight());
    validate();
    }
    private Panel row1,row2,row3,p12,p120,p3p,p3peq;
    private Button c,eq,div,times,d7,d8,d9,minue,d4,d5,d6,plus,d1,d2,d3,d0,dp,eq2;
    private Color background;
    private Label result;
    }
      

  5.   

    邮箱:[email protected]
      欢迎大家交流!
      

  6.   

    resize()方法有问题,不应该写在paint()方法里面,resize()方法会引起浏览器刷新导致重新调用paint()方法,会一直循环调用,所以就一直闪。
      

  7.   

    public Object eval(String str){
       //生成java文件
       String s = "class Temp{";
    s += "Object rt(){"
    s += "MyClass mc = new MyClass();"
            s += " return mc."+str+"();";
            s += "}"
    s +="}";
       File f = new File("Temp.java");
       PrintWriter pw = new PrintWriter(new FileWriter(f));
       pw.println(s);
       pw.close();
       //动态编译
       com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
       String[] cpargs = new String[] {"-d", "所在目录","Temp.java"};
       int status = javac.compile(cpargs);
       if(status!=0){
          System.out.println("没有成功编译源文件!");
          return null;
       }
       //调用Temp的rt方法返回结果:
       MyClassLoader mc = new MyClassLoader();
       Class clasz = mc.loadClass("Test.class",true);
       Method rt = clasz.getMethod("rt", new Class[]{ String[].class });
       return rt.invoke(null, new Object[] { new String[0] });
       //如果方法没有返回就直接调用
    }---------------
    直接调用JAVA编译器处理,想多复杂的语句都行