//注意,没有考虑*/和+-的优先级。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator3 extends JFrame implements ActionListener {
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者
public Calculator3() {
setTitle("Calculator");
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '?';
// 初始化窗口变量
operation = new JTextField("0");
operation.setEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton(".");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("*");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
changePN = new JButton("±");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == clear) {
operation.setText("0");
dotExist = false;
storedNumber = 0;
lastOperator = '?';
} else if (btn == equal) {
operate('=');
equaled = true;
} else if (btn == plus) {
operate('+');
equaled = false;
} else if (btn == minus) {
operate('-');
equaled = false;
} else if (btn == multi) {
operate('*');
equaled = false;
} else if (btn == div) {
operate('/');
equaled = false;
} else if (btn == changePN) {
operate('p');
operate('=');
equaled = true;
} else if (btn == sqrt) {
operate('s');
operate('=');
equaled = true;
} else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operation.getText().equals("0"))
operation.setText("" + i);
else if (!operated)
operation.setText(operation.getText() + i);
else {
operation.setText("" + i);
operated = false;
}
}
if (btn == dot && !dotExist) {
operation.setText(operation.getText() + ".");
dotExist = true;
}
}
}
// 进行运算的方法
private void operate(char operator) {
double currentNumber = Double.valueOf(operation.getText())
.doubleValue();
if (lastOperator == '?')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '*')
storedNumber *= currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber *= -1;
else if (lastOperator == 's')
storedNumber = Math.sqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operation.setText("" + storedNumber);
operated = true;
lastOperator = operator;
}
// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component,
int row, int col, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component).addActionListener(this);
getContentPane().add(component);
}
// 主方法初始化并显示窗口
public static void main(String[] args) {
Calculator3 calc = new Calculator3();
calc.setSize(290, 400);
calc.setVisible(true);
}
}
这个你都看不懂??看程序需要点耐心的
读函数,关键是掌握方法,哪怕是初学,先从main函数下手读,到它调用函数了,再看它调用的函数是干吗用的,上定义哪个函数的地方找;像这么简单的函数应该一看就能明白了;这个计算器的程序只能实现最简单的 两个数字的运算,除了累乘函数;如果有兴趣你不妨自己写下多个数字的运算,包括考虑优先级,再有实力的话 可以试一下有括号的情况
#include
/*加法函数*/
double add(double a,double b)
{
double s;
s=a+b;
return s;
}
/*减法函数*/
double sub(double a,double b)
{
double s;
s=a-b;
return s;
}
/*乘法函数*/
double multi(double a,double b)
{
double s;
s=a*b;
return s;
}
/*除法函数*/
double div(double a,double b)
{
double s;
s=a/b;
return s;
}
/*累乘函数*/
double power(double a,double b)
{
int i=0;
double s=1.0;
if(b==0) // 如果是0个数字相乘,返回答案 1
return s=1;
else //如果相乘数字大于1 对他们累乘
{
for (i=1;i<=b;i++)
s*=a;
return s;
}
}
/*取余函数*/
double mod(double a,double b)
{
int s;
s=(int)a%(int)b;
return s;
}
void main(void)
{
double a,b;
char c;
double sum;
scanf("%lf,%c,%lf",&a,&c,&b); // 输入三个字符 例如 1+2
printf("%lf,%c,%lf\n",a,c,b); // 输出 输入的三个字符 例如1+2
switch(c) //switch语句自己查下,就是对你输入的那个运算符 c 作判断
{
case '+':sum=add(a,b); //输入的是 + 号 执行 add()函数 即加法函数(下同) ,函数调用你应该明白的吧,如果你这都不明白我想我也没法说了
break;
case '-':sum=sub(a,b);
break;
case '*':sum=multi(a,b);
break;
case '/':sum=div(a,b);
break;
case '^':sum=power(a,b); 输入 ^ 就执行累乘函数
break;
case '%':sum=mod(a,b);
break;
default:printf("input is error!"); // 如果 你输入的符号不在这6种之中,提示输入错误 例如你输入 234,它会提示错误
}
if(c=='%') // 如果符号是 % 按照 %d 形式输出结果
printf("sum=%d",sum);
else // 如果输入不是 % 按照 %lf的形式输出结果
printf("sum=%lf",sum);
getch(); //这个貌似是wintc 编译器中的格式,如果不是wintc 课选择去掉,只是个固定格式不用关心
}
#include
double add(double a,double b)
{
double s;//定义s
s=a+b;//+
return s;//返回结果
}
double sub(double a,double b)
{
double s;
s=a-b;//-
return s;
}
double multi(double a,double b)
{
double s;
s=a*b;//*
return s;
}
double div(double a,double b)
{
double s;
s=a/b;// /
return s;
}
double power(double a,double b)
{
int i=0;
double s=1.0;//定义i,s
if(b==0)
return s=1;//a的0次方 1
else
{
for (i=1;i<=b;i++)
s*=a;//b个a相乘
return s;
}
}
double mod(double a,double b)
{
int s;
s=(int)a%(int)b;//取余
return s;
}
void main(void)
{
double a,b;
char c;
double sum;
scanf("%lf,%c,%lf",&a,&c,&b);
printf("%lf,%c,%lf\n",a,c,b);//对c判断,做加减乘除,否则error
switch(c)
{
case '+':sum=add(a,b);
break;
case '-':sum=sub(a,b);
break;
case '*':sum=multi(a,b);
break;
case '/':sum=div(a,b);
break;
case '^':sum=power(a,b);
break;
case '%':sum=mod(a,b);
break;
default:printf("input is error!");
}
if(c=='%')
printf("sum=%d",sum);
else
printf("sum=%lf",sum);
getch();
}
上楼对了