想写个计算器!!

qianlei0007 2006-12-08 01:30:27
看到,windows自带的计算器不错。。
想用java写个,看起来挺简单。。。。
连加,连减。。。实现起来还是挺麻烦的!!
发帖,感慨下!!
...全文
418 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaper 2007-01-07
  • 打赏
  • 举报
回复
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编译器处理,想多复杂的语句都行
kkids 2007-01-07
  • 打赏
  • 举报
回复
刚学,要加油了
intotheland 2006-12-08
  • 打赏
  • 举报
回复
resize()方法有问题,不应该写在paint()方法里面,resize()方法会引起浏览器刷新导致重新调用paint()方法,会一直循环调用,所以就一直闪。
qianlei0007 2006-12-08
  • 打赏
  • 举报
回复
谢谢大家关心!!!
redhat456 2006-12-08
  • 打赏
  • 举报
回复
数据结构的时候做过!
e_snow 2006-12-08
  • 打赏
  • 举报
回复
计算器程序用到的知识很多,鼓励楼主编成。
qianlei0007 2006-12-08
  • 打赏
  • 举报
回复
刚看了下你写的。。。
叼!!!
qianlei0007 2006-12-08
  • 打赏
  • 举报
回复
邮箱:qianlei0007@126.com
欢迎大家交流!
chenyifei211 2006-12-08
  • 打赏
  • 举报
回复
我也做了一个,是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;
}
malligator 2006-12-08
  • 打赏
  • 举报
回复
imA(男的不会,会的不男) ( ) 信誉:5 Blog 2006-12-8 13:35:03 得分: 0

呵呵。


语法编译器,压栈、出栈。

==========
Windows那个没有那么麻烦!
因为它没有表达式,用些标志记录一下状态就OK了的

kelvin318 2006-12-08
  • 打赏
  • 举报
回复
还是给我发邮件吧.
我很少来这里的.
Email:lhl318@hotmail.com
kelvin318 2006-12-08
  • 打赏
  • 举报
回复
努力ing...
偶正在ing...
做完给你看看.发现自己做的...有很多冗余代码.
应该有更好的解决方法.
期待ing...你的.
给我留下你的邮箱吧.
一起努力.
imA 2006-12-08
  • 打赏
  • 举报
回复
呵呵。


语法编译器,压栈、出栈。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧