永发信息网

用JAVA设计一个计算器程序

答案:2  悬赏:0  手机版
解决时间 2021-03-09 10:44
要求:①有计算器界面,计算器可进行四则运算和部分函数运算;②可以输入浮点数;③通过单击“+”、“-”、“×”、“÷”、“1/x”、“sqrt”、“lg”、“sin”按钮进行加法、减法、乘法、除法、倒数、开平方、常用对数、正弦函数运算;④使用鼠标单击相应数字(含小数点)按钮进行输入;⑤输入的角度数据为以“度.分秒”格式,需要转换单位,以适应计算;⑥要显示计算结果时,须单击“=”按钮;⑦对于小数,保留4位;⑧要能够排除非法输入(如:一个实数中有两个小数点或运算符相连,等等)和改正输入过程中的错误。
最佳答案
我有,你联系我,我把代码给你! 为了防止别人以为我们作弊了,在这里给出前半段代码……

package MyProject;

import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
public class Counter extends Frame
{
//声明三个面板的布局
GridLayout gl1,gl2,gl3;
Panel p0,p1,p2,p3;
JTextField tf1;
TextField tf2;
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26;
StringBuffer str;//显示屏所显示的字符串
double x,y;//x和y都是运算数
int z;//Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"
static double m;//记忆的数字
public Counter()
{
gl1=new GridLayout(1,4,10,0);//实例化三个面板的布局
gl2=new GridLayout(4,1,0,15);
gl3=new GridLayout(4,5,10,15);

tf1=new JTextField(27);//显示屏
tf1.setHorizontalAlignment(JTextField.RIGHT);
tf1.setEnabled(false);
tf1.setText("0");
tf2=new TextField(10);//显示记忆的索引值
tf2.setEditable(false);
//实例化所有按钮、设置其前景色并注册监听器
b0=new Button("Backspace");
b0.setForeground(Color.red);
b0.addActionListener(new Bt());
b1=new Button("CE");
b1.setForeground(Color.red);
b1.addActionListener(new Bt());
b2=new Button("C");
b2.setForeground(Color.red);
b2.addActionListener(new Bt());
b3=new Button("MC");
b3.setForeground(Color.red);
b3.addActionListener(new Bt());
b4=new Button("MR");
b4.setForeground(Color.red);
b4.addActionListener(new Bt());
b5=new Button("MS");
b5.setForeground(Color.red);
b5.addActionListener(new Bt());
b6=new Button("M+");
b6.setForeground(Color.red);
b6.addActionListener(new Bt());
b7=new Button("7");
b7.setForeground(Color.blue);
b7.addActionListener(new Bt());
b8=new Button("8");
b8.setForeground(Color.blue);
b8.addActionListener(new Bt());
b9=new Button("9");
b9.setForeground(Color.blue);
b9.addActionListener(new Bt());
b10=new Button("/");
b10.setForeground(Color.red);
b10.addActionListener(new Bt());
b11=new Button("sqrt");
b11.setForeground(Color.blue);
b11.addActionListener(new Bt());
b12=new Button("4");
b12.setForeground(Color.blue);
b12.addActionListener(new Bt());
b13=new Button("5");
b13.setForeground(Color.blue);
b13.addActionListener(new Bt());
b14=new Button("6");
b14.setForeground(Color.blue);
b14.addActionListener(new Bt());
b15=new Button("*");
b15.setForeground(Color.red);
b15.addActionListener(new Bt());
b16=new Button("%");
b16.setForeground(Color.blue);
b16.addActionListener(new Bt());
b17=new Button("1");
b17.setForeground(Color.blue);
b17.addActionListener(new Bt());
b18=new Button("2");
b18.setForeground(Color.blue);
b18.addActionListener(new Bt());
b19=new Button("3");
b19.setForeground(Color.blue);
b19.addActionListener(new Bt());
b20=new Button("-");
b20.setForeground(Color.red);
b20.addActionListener(new Bt());
b21=new Button("1/X");
b21.setForeground(Color.blue);
b21.addActionListener(new Bt());
b22=new Button("0");
b22.setForeground(Color.blue);
b22.addActionListener(new Bt());
b23=new Button("+/-");
b23.setForeground(Color.blue);
b23.addActionListener(new Bt());
b24=new Button(".");
b24.setForeground(Color.blue);
b24.addActionListener(new Bt());
b25=new Button("+");
b25.setForeground(Color.red);
b25.addActionListener(new Bt());
b26=new Button("=");
b26.setForeground(Color.red);
b26.addActionListener(new Bt());

//实例化四个面板
p0=new Panel();
p1=new Panel();
p2=new Panel();
p3=new Panel();
//创建一个空字符串缓冲区
str=new StringBuffer();

//添加面板p0中的组件和设置其在框架中的位置和大小
p0.add(tf1);
p0.setBounds(10,25,300,40);
//添加面板p1中的组件和设置其在框架中的位置和大小
p1.setLayout(gl1);
p1.add(tf2);
p1.add(b0);
p1.add(b1);
p1.add(b2);
p1.setBounds(10,65,300,25);
//添加面板p2中的组件并设置其的框架中的位置和大小
p2.setLayout(gl2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.setBounds(10,110,40,150);
//添加面板p3中的组件并设置其在框架中的位置和大小
p3.setLayout(gl3);//设置p3的布局
p3.add(b7);
p3.add(b8);
p3.add(b9);
p3.add(b10);
p3.add(b11);
p3.add(b12);
p3.add(b13);
p3.add(b14);
p3.add(b15);
p3.add(b16);
p3.add(b17);
p3.add(b18);
p3.add(b19);
p3.add(b20);
p3.add(b21);
p3.add(b22);
p3.add(b23);
p3.add(b24);
p3.add(b25);
p3.add(b26);
p3.setBounds(60,110,250,150);
//设置框架中的布局为空布局并添加4个面板
setLayout(null);
add(p0);
add(p1);
add(p2);
add(p3);
setResizable(false);//禁止调整框架的大小
//匿名类关闭窗口
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e1)
{
MainFrame.getMyMainFrame().setEnabled(true);
Counter.this.dispose();
}
});
setBackground(Color.lightGray);
setBounds(100,100,320,280);
setVisible(true);

}
全部回答
import java.awt.*; import java.awt.event.*; public class calcappdemo extends frame{ private textfield t_result; private panel p_main; //主面板 private panel p_num; //数字面板 private panel p_oper; //操作符面板 private panel p_show; //显示面板 private button b_num[]; //数字按钮 private button b_oper[]; //操作符面板 public calcappdemo(string title){ settitle(title); t_result = new textfield("0.0", 21); p_main = new panel(); p_num = new panel(); p_oper = new panel(); p_show = new panel(); p_main.setlayout(new borderlayout()); p_num.setlayout(new gridlayout(4, 3, 1, 1)); p_oper.setlayout(new gridlayout(4, 2, 1, 1)); b_num = new button[12]; for(int i=0; i<9; i++) { b_num[i] = new button(new integer(i+1).tostring()); } b_num[9] = new button("0"); b_num[10] = new button("cls"); b_num[11] = new button("."); for(int i=0; i<12; i++) { p_num.add(b_num[i]); } b_oper = new button[8]; b_oper[0] = new button("+"); b_oper[1] = new button("-"); b_oper[2] = new button("*"); b_oper[3] = new button("/"); b_oper[4] = new button("pow"); b_oper[5] = new button("sqrt"); b_oper[6] = new button("+/-"); b_oper[7] = new button("="); for(int i=0; i<8; i++) // { p_oper.add(b_oper[i]); } t_result.seteditable(false); p_show.add(t_result, borderlayout.north); p_main.add(p_show, borderlayout.north); p_main.add(p_num, borderlayout.west); p_main.add(p_oper, borderlayout.east); this.add(p_main, borderlayout.center); setsize(400, 400); setresizable(false); pack(); this.addwindowlistener(new windowadapter(){ public void windowclosing(windowevent e) { system.exit(0); } }); buttonlistener b1 = new buttonlistener(); for(int i=0; i<12; i++) { b_num[i].addactionlistener(b1); } for(int i=0; i<8; i++) { b_oper[i].addactionlistener(b1); } } class buttonlistener implements actionlistener { private string lastop; //存储上一此操作符 private string strval; //存储数字对应的字符串 private double total; //总数 private double number; //存储新输入的数 private boolean firsttime; //判断是否第一次按下的是操作符按钮 private boolean operatorpressed;//判断是否已经按过操作符按钮 buttonlistener() { firsttime = true; strval = ""; } //事件处理器 public void actionperformed(actionevent e) { string s = ((button)e.getsource()).getlabel().trim(); if(character.isdigit(s.charat(0))) {//判断是操作数还是操作符 handlenumber(s); } else { calculate(s); } } //判断是一元操作符还是二元操作符,并根据操作符类型做计算 void calculate(string op) { operatorpressed = true; if(firsttime&&! isunary(op)) { total = getnumberondisplay(); firsttime = false; } if(isunary(op)) { handleunaryop(op); } else if(lastop != null) { handlebinaryop(lastop); } if(! isunary(op)) { lastop = op; } } //判断是否一元操作符 boolean isunary(string s) { return s.equals("=") ||s.equals("cls")||s.equals("sqrt") ||s.equals("+/-")||s.equals("."); } //处理一元操作符 void handleunaryop(string op) { if(op.equals("+/-")) {// number = negate(getnumberondisplay() + ""); t_result.settext(""); t_result.settext(number + ""); return; }else if(op.equals(".")) { handledecpoint(); return; }else if(op.equals("sqrt")) { number = math.sqrt(getnumberondisplay()); t_result.settext(""); t_result.settext(number + ""); return; }else if(op.equals("=")) {// if(lastop!= null && !isunary(lastop)) { handlebinaryop(lastop); } lastop = null; firsttime = true; return; }else { clear(); } } //处理二元运算符 void handlebinaryop(string op) { if(op.equals("+")) { total +=number; }else if(op.equals("-")) { total -=number; }else if(op.equals("*")) { total *=number; }else if(op.equals("/")) { try { total /=number; }catch(arithmeticexception ae){} }else if(op.equals("pow")) total = math.pow(total, number); //t_result.settext(""); lastop = null; // strval = ""; number = 0; t_result.settext(total + ""); } //该方法用于处理数字按钮 void handlenumber(string s) { if(!operatorpressed) { strval += s; }else { operatorpressed = false; strval = s; } // number = new double(strval).doublevalue(); t_result.settext(""); t_result.settext(strval); } //该方法用于按下"."按钮 void handledecpoint() { operatorpressed = false; // if(strval.indexof(".")<0) { strval += "."; } t_result.settext(""); t_result.settext(strval); } //该方法用于将一个数求反 double negate(string s) { operatorpressed = false; //如果是一个整数,去掉小数点后面的0 if(number == (int)number) { s = s.substring(0,s.indexof(".")); } //如果无"-"增加在该数的前面 if(s.indexof("-")<0) { strval = "-" + s; } else { strval = s.substring(1); } return new double(strval).doublevalue(); } //将显示框中的值转换成double double getnumberondisplay() { return new double(t_result.gettext()).doublevalue(); } //清除屏幕并设置所有的标识 void clear() { firsttime = true; lastop = null; strval = ""; total = 0; number = 0; t_result.settext("0"); } } public static void main(string[] args) { calcappdemo c = new calcappdemo("简单的计算器程序"); c.setvisible(true); } } 参
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
急求!从深圳宝安区石岩镇到深圳机场坐出租车
用百度软件助手下的PS怎么安装
平坝地地址有知道的么?有点事想过去
佛山市南海区桂城街江滨社区居民委员会地址有
打折机票换登机牌需要提前多久到啊
为什么说除了地球,人类不能移民到另一个星球
圣肤诺珍珠名妆这个地址在什么地方,我要处理
8Giphone够用吗?
博野县医院门诊病房综合楼地址在哪,我要去那
当人由平原地区进入高原地区后,血液成分中含
斯洛文尼亚说什么语言
南唐后主李煜的后代?
大海味道没有生产日期
银龙鱼价格
根据七星现代风水学我家的主卧室 餐厅 厨房
推荐资讯
我已经结婚生子了,可是我却喜欢上了另外一个
长沙到新疆自驾免费的高速公路
中间带晧字的,后面配个什么字好听,男孩子名
贵州“六盘水市”的得名是六枝、盘县和水城的
家长如何开大班家长会
PET瓶胚注塑需要注意什么问题
我在重庆,中国银行的信用卡在哪家涮窝店能打
5个月大女儿,嘴边长一圈小疙瘩,红色的,很
大地鹰王250电喷水冷总是加不加油是什么原因
使用wifi接收器时用电脑分享wifi,怎么让分享
家里安装的led灯,用了快一年了,昨晚闭灯后
地下城与勇士拍卖行下线了也在继续拍卖吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?