计算器 用java编写

计算器程序,能够实现基本数学运算等功能:加、减、乘、除正弦、余弦、开平方、指数、二进制数、八进制数、十六进制之间的相互转换 (程序段要有仔细的文字说明)能使用的话 有50分奖励.。。 请各位大侠帮帮忙
最新回答
西柚

2024-09-25 03:58:53

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import javax.swing.*;
public class TestComputer implements ActionListener{//用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,
//而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。
private boolean append = false;//数字处于替换状态
JTextField jtf = new JTextField(10);//构造一个具有指定列数的新的空 TextField。
private String operator = "+";
private String op1 = "0";
public void actionPerformed(ActionEvent ae){//发生操作时调用。
String com = ae.getActionCommand();//返回与此动作相关的命令字符串。
if("0123456789".indexOf(com)!=-1){//返回第一次出现的指定子字符串在此字符串中的索引。
if(append){//追加
String temp = jtf.getText();//返回此 TextComponent 中包含的文本。
jtf.setText(temp+com);//将此 TextComponent 文本设置为指定文本。
}else{//替换
jtf.setText(com);
append = true;
}
}else if("+-*/".indexOf(com)!=-1){//返回第一次出现的指定子字符串在此字符串中的索引。
op1 = jtf.getText();
operator = com;
append = false;
}else if("=".equals(com)){
String op2 = jtf.getText();
BigDecimal d1 = new BigDecimal(op1);// 将 BigDecimal 的字符串表示形式转换为 BigDecimal。
//BigDecimal不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成
BigDecimal d2 = new BigDecimal(op2);
if("+".equals(operator)){
d1 = d1.add(d2);//返回一个 BigDecimal,其值为(this + augend),其标度为 max(this.scale(), augend.scale())
}else if("-".equals(operator)){
d1 = d1.subtract(d2);//返回一个BigDecimal,其值为(this - subtrahend),其标度为max(this.scale(),subtrahend.scale())
}else if("*".equals(operator)){
d1 = d1.multiply(d2);//返回一个BigDecimal,其值为(this × multiplicand),其标度为(this.scale()+multiplicand.scale())
}else{
d1 = d1.divide(d2,10,BigDecimal.ROUND_HALF_UP);
}//divide() 返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
jtf.setText(d1.toString());//返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。
append = false;
}else if(".".equals(com)){
String temp = jtf.getText();
if(temp.indexOf(com)==-1){//没有找到
jtf.setText(temp+".");
append = true;
}
}else if("+/-".equals(com)){
String temp = jtf.getText();
if(temp.startsWith("-")){
jtf.setText(temp.substring(1));
}else{
jtf.setText("-"+temp);
}
}else if("Back".equals(com)){
String temp = jtf.getText();
if(temp.length()>0){
jtf.setText(temp.substring(0,temp.length()-1));
}
}else if("CE".equals(com)||"C".equals(com)){
jtf.setText("0");
}
}
public TestComputer(){
JFrame jf = new JFrame("grefr的计算器");//创建一个新的、初始不可见的、具有指定标题的 Frame。
JPanel jp = new JPanel();//创建具有双缓冲和流布局的新 JPanel。
String[] lab = {"Back","CE","C","+","7",
"8","9","-","4","5","6","*","1","2",
"3","/","0",".","+/-","="};
jp.setLayout(new GridLayout(5,4));
//setLayout(LayoutManager mgr)设置此容器的布局管理器。
//GridLayout(int rows, int cols)创建具有指定行数和列数的网格布局。
jtf.setEditable(false);//设置指定的 boolean 变量,以指示此 TextComponent 是否应该为可编辑的
JButton[] jb = new JButton[lab.length];
jf.add(jtf,BorderLayout.NORTH);
for(int i=0;i<jb.length;i++){
jb[i] = new JButton(lab[i]);
jp.add(jb[i]);
jb[i].addActionListener(this);//将一个 ActionListener 添加到按钮中。
}
jf.add(jp);
jf.setSize(300,300);
jf.setLocation(250, 250);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestComputer();
}
}
追问
能帮我加上正弦余弦的算发   还有二进制八进制十六进制   还有对数的运算就是log的算法   请帮帮忙!
不堪烟染

2024-09-25 02:13:16

你用getText得到屏幕上显示的那些字符串,以 + - * / 为分割符,截取前面的字符串和后面的字符串,然后用double b = Double.parseDouble(a);这个方法转变为浮点数,再进行+ - * / 运算吧~
不知道是不是你要的答案~!呵呵~~