100分!各位大哥帮忙啊!老师让我们做一个“计算器”?怎么做了?谢谢!

zizhuo_2008 2008-01-17 04:32:50
100分!各位大哥帮忙啊!老师让我们做一个“计算器”?怎么做了?谢谢!
...全文
229 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzi041 2008-01-20
  • 打赏
  • 举报
回复
主要是计算器这个程序用到了很多数据结构和编译原理方面的知识;
所以大学老师才比较偏爱这个...
可惜,偶们老师还没有布置过这个问题呢...
自己正在做这个东西..
很辛苦啊~~~
不过能够学到很多数据结构方面的知识;挺好.
wangwang3ok 2008-01-20
  • 打赏
  • 举报
回复
作业贴,又见作业贴....
wangjihong83 2008-01-20
  • 打赏
  • 举报
回复
只要用心去做你想做的每一道题!
你会进步的很快的!
所以楼主要加油啊!
sidenycc 2008-01-20
  • 打赏
  • 举报
回复
处理括号用下堆栈就可以了
lanicetomas 2008-01-20
  • 打赏
  • 举报
回复
只是个简单的算法
yilesoft 2008-01-19
  • 打赏
  • 举报
回复
貌似大学时我们学的VFP,老师让我们用VFP写计算器,后来妹妹大学时老师让他们用C语言来写计算器,看来大学的老师很喜欢计算器哟。建议楼主参考别人的思想自己动手来写一个,这样能提高自己的水平。
LIVELY88 2008-01-19
  • 打赏
  • 举报
回复
正在学java,以前HTML的做过~!COPY研究下!
euroman 2008-01-19
  • 打赏
  • 举报
回复
上面那个程序没有处理括号问题和变量问题,
基础的计算器是需要处理的,一般有几个方法:
1。采用逆波兰表达式,然后用两个堆栈做运算
2。采用迭代函数,道理和上面一样,只是堆栈不在堆里面完成,而是通过迭代实现
3。采用binary tree做,这个比较有效率,而且科学。我建议用这个。叶子是变量,每个节点是运算符,binary tree根据operator的优先度构造

这个应该是大学的作业,我大一的时候做过了,不过代码是C
yy_123 2008-01-19
  • 打赏
  • 举报
回复
做人要厚道,要给分.
不然高手都不愿意答问题了
dave080 2008-01-19
  • 打赏
  • 举报
回复
private void initKeyPanel() /*设置数字键和运算符键*/
{String key[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
KeyPanel = new JPanel();
KeyPanel.setLayout(new GridLayout(4,5,4,4));
for(int i=0;i<20;i++)
{String label = key[i];
JButton b = new JButton(label);
b.setActionCommand(key[i]);
b.setFont(font2);
KeyPanel.add(b);
b.addActionListener(new ActionListener() /*无名监听器*/
{public void actionPerformed(ActionEvent e)
{Key_actionPerformed(e);
}
});
}
}
public void Key_actionPerformed(ActionEvent e) /*数字键和运算符键无名监听器*/
{String s=(e.getActionCommand());
String st=Resultarea.getText();
if(s.equals("0")) /*输入数为0*/
{if(st.equals("0"))
return;
else
{if(!isNew)
Resultarea.setText(st+"0");
else
Resultarea.setText("0");
}
isNew=false;
return;
}

if(s.equals("+/-")) /*输入数为+/-*/
{double k=Double.parseDouble(st);
{if(k!=0)
display(-k);

}
return;
}

if(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")) /*输入1-9*/
{if(!isNew)
Resultarea.setText(st+s);
else
{ Resultarea.setText(s);
isNew=false;
}
return;
}

if(s.equals(".")) /*输入小数点*/
{if(Resultarea.getText().indexOf(".")==-1) /*不存在小数点*/
{if(isNew)
{Resultarea.setText("0.");
isNew=false;
}
else
Resultarea.setText(st+".");
}
return;
}

isNew=true; /*按下运算符,输入新的数*/
if(s.equals("="))
{compute(s);
operation="";
}
else
{if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")) /*二目运算符号*/
{if(operation.equals(""))
{pnum=Resultarea.getText();
operation=s;
}
else
compute(s);
}
else /*一目运算*/
{Count count1=new Count(Double.parseDouble(st));
if(s.equals("sqrt"))
{
display(count1.sqrt());

}
else
{if(s.equals("1/x"))
{if(st.equals("0"))
{Resultarea.setText("除数不能为0.");
operation="";
pnum="";
}
else
display(count1.reciprocal()); /*求倒数*/
}
else
display(Double.parseDouble(st)/100); /*输入%,使当前显示的值除于100*/
}
}
}
}

private void compute(String s)
{if(s.equals("="))
{if(operation.equals(""))
return;
}
double data1=Double.parseDouble(pnum);
double data2=Double.parseDouble(Resultarea.getText());
Count count2=new Count(data1,data2); /*加减乘除计算*/
if(operation.equals("+"))
display((count2.plus()));
else
{if(operation.equals("-"))
display((count2.minus()));
else
{if(operation.equals("*"))
display((count2.multiply()));
else
if(operation.equals("/"))
{if(data2==0)
{Resultarea.setText("除数不能为0");
operation="";
pnum="";
return;
}
else
display((count2.divide()));
}
}
}
operation=""; /*符号为当前符*/
pnum=Resultarea.getText();/*运算数为当前文本数*/
}

public void display(double result) /*显示输出方法*/
{int a=(int)result;
if(a==result)
Resultarea.setText(String.valueOf(a));
else
Resultarea.setText(String.valueOf(result));
if(Resultarea.getText().equals("NaN"))
Resultarea.setText("输入函数无效");
}

private JPanel TextPanel; /*文本框棉板*/
private JTextField Resultarea; /*文本框*/
private JPanel ControlPanel; /*控制键键面板*/
private JPanel KeyPanel; /*数字键和运算符键面板*/
private Font font1=new Font("Dialog",0, 10); /*控制键字体*/
private Font font2 = new Font("Dialog",0,10); /*数字键和符号键字体*/
private String pnum=""; /*前操作数*/
private boolean isNew=true; /*控制是否是新数*/
private String operation=""; /*运算符*/
}


class tester /*测试类*/
{
public static void main(String[] args)
{
new calculation();
}
}
dave080 2008-01-19
  • 打赏
  • 举报
回复
我上个学期老师也叫我们 做这个东西,我的代码还在!给你看看,我也是那时候请教的别人的。
java计算器


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class calculation extends JFrame
{public calculation() /*构造方法*/
{super("计数器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initTextPanel(); /*文本框*/
initControlPanel(); /*控制键*/
initKeyPanel(); /*数字和运算符*/
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
pane.add(TextPanel,BorderLayout.NORTH);
pane.add(ControlPanel,BorderLayout.CENTER);
pane.add(KeyPanel,BorderLayout.SOUTH);
pack();
try
{UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception ex)
{;} /*设置Windons观感*/
SwingUtilities.updateComponentTreeUI(this);
setResizable(false);
setVisible(true);
}

private void initTextPanel() /*设置文本框*/
{ TextPanel=new JPanel();
TextPanel.setLayout(new FlowLayout());
Resultarea =new JTextField("0",25);
Resultarea.setEditable(false); /*设置不可编辑*/
Color color=Color.white;
Resultarea.setBackground(color); /*颜色*/
Resultarea.setHorizontalAlignment(JTextField.RIGHT); /*设置显示位置*/
TextPanel.add(Resultarea);
}

private void initControlPanel() /*设置控制键*/
{ControlPanel=new JPanel();
ControlPanel.setLayout(new GridLayout(1,3,4,4));
JButton b1=new JButton("Backspace"); /*Backspace键*/
b1.setFont(font1);
b1.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{String s1=Resultarea.getText();
int l=s1.length();
Resultarea.setText(s1.substring(0 ,l-1));
}
});

ControlPanel.add(b1);
JButton b2=new JButton("CE"); /*CE键*/
b2.setFont(font1);
b2.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{Resultarea.setText("0");
isNew=true;
}
});
ControlPanel.add(b2);

JButton b3=new JButton("C"); /*C键*/
b3.setFont(font1);
b3.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{Resultarea.setText("0");
pnum="";
operation="";
isNew=true;
}
});
ControlPanel.add(b3);
}

JadoNet 2008-01-18
  • 打赏
  • 举报
回复
估计lz把6楼的代码直接copy了,呵呵
zizhuo_2008 2008-01-18
  • 打赏
  • 举报
回复
谢谢大哥么!教训小弟,我会好好学的。
cangyue87 2008-01-18
  • 打赏
  • 举报
回复
作业贴,又见作业贴....
不懂编程 2008-01-18
  • 打赏
  • 举报
回复
哪怕貌似100分,也该结贴了
oxcow 2008-01-17
  • 打赏
  • 举报
回复
随便在图书馆找个跟JAVA有关的书都有这样的例子。
yiyi_wx 2008-01-17
  • 打赏
  • 举报
回复
LZ最好还是自己多动手,千万不可只看不练~
sidenycc 2008-01-17
  • 打赏
  • 举报
回复
写了个简易型的,自己再+点功能吧

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Calculate extends JFrame
implements ActionListener{

private JTextField display=new JTextField();
private JButton[] buttons=new JButton[16];
private String[] keys={"7","8","9","/",
"4","5","6","*",
"1","2","3","-",
"0","C","=","+"};
//to store the 2 inputs;
private String numStr1="";
private String numStr2="";
//to store the result or mid-result;
private String rstStr="";
//to define the first input is finished;
private boolean symb=false;
//to store the op;
private char op;

public Calculate(){
//Create the Frame;
setTitle("My Calculate");
setSize(230,200);

//Get the pane;
Container pane=this.getContentPane();
pane.setLayout(null);

//add the display;
display.setSize(200,30);
display.setLocation(10,10);
pane.add(display);

//add the buttons;
int x=10,y=40;
for(int i=0;i<16;i++){
buttons[i]=new JButton(keys[i]);
buttons[i].setSize(50,30);
buttons[i].setLocation(x,y);
buttons[i].addActionListener(this);
pane.add(buttons[i]);
if(i%4!=3){
x+=50;
}
else{
x=10;
y+=30;
}
}
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);

}
//implements the interface
public void actionPerformed(ActionEvent e){
String str=String.valueOf(e.getActionCommand());
char ch=str.charAt(0);
switch(ch){
case '1':case '2':case '3':
case '4':case '5':case '6':
case '7':case '8':case '9':case '0':
if(!symb){
numStr1+=ch;
display.setText(numStr1);
}
else{
numStr2+=ch;
display.setText(numStr2);
}
break;
case '/':case '*':case '-':case '+':
op=ch;
symb=true;
break;
case 'C':
display.setText("");
numStr1=numStr2="";
symb=false;
break;
case '=':
rstStr=evaluate();
display.setText(rstStr);
try{
int temp=Integer.parseInt(rstStr);
}
catch(NumberFormatException e2){
numStr1="";
numStr2="";
symb=false;
break;
}
numStr1=rstStr;
numStr2="";
break;
}
}

//used to evaluate the result;
private String evaluate(){
int result=0;
try{
int num1=Integer.parseInt(numStr1);
int num2=Integer.parseInt(numStr2);
switch (op){
case '+':result=num1+num2;
break;
case '-':result=num1-num2;
break;
case '*':result=num1*num2;
break;
case '/':result=num1/num2;
break;
}
return String.valueOf(result);
}
catch(ArithmeticException e){
return "ERROR:"+e.getMessage();
}
catch(NumberFormatException e){
if(numStr1.equals(""))
return "ERROR:Invalid First Number";
else
return "ERROR:Invalid Second Number";
}
catch(Exception e){
return "ERROR";
}
}
public static void main(String args[]){
Calculate myCalculate=new Calculate();
}
}

kx201051291234 2008-01-17
  • 打赏
  • 举报
回复
这个简单啊可惜我没有GUI插件 又不爱布局
kellyme 2008-01-17
  • 打赏
  • 举报
回复
貌似在DFBZ上课的时候老师也让做了,不过我自己也没做出来。。。
现在J2SE的都忘啦
加载更多回复(3)

62,623

社区成员

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

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