当前位置: 代码迷 >> Java Web开发 >> [讨论]我这有一个计算器的程序,有些地主看不明白,请指教喔
  详细解决方案

[讨论]我这有一个计算器的程序,有些地主看不明白,请指教喔

热度:286   发布时间:2007-11-17 15:16:11.0
[讨论]我这有一个计算器的程序,有些地主看不明白,请指教喔
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class win extends JFrame implements ActionListener{
static double n=0;
static double m1=0,m2=0;
static double temp=0;
static int flag=0;
JTextField jt1;
JLabel jl1,jl2,wife;
JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb0,jbgl;
JButton plus,minus,multiply,divide,equal;
win(){
Container c=getContentPane();
c.setLayout(null);
jt1=new JTextField("0");
jt1.setSize(210,40);
jt1.setLocation(20,40);
c.add(jt1);
jl1=new JLabel("Tracy's calculator");
jl1.setSize(120,20);
jl1.setLocation(120,20);
c.add(jl1);
plus=new JButton("+");
plus.setSize(50,30);
plus.setLocation(260,300);
plus.addActionListener(this);
c.add(plus);
minus=new JButton("-");
minus.setSize(50,30);
minus.setLocation(260,240);
minus.addActionListener(this);
c.add(minus);
multiply=new JButton("*");
multiply.setSize(50,30);
multiply.setLocation(260,180);
multiply.addActionListener(this);
c.add(multiply);
divide=new JButton("/");
divide.setSize(50,30);
divide.setLocation(260,120);
divide.addActionListener(this);
c.add(divide);
equal=new JButton("=");
equal.setSize(50,30);
equal.setLocation(180,300);
equal.addActionListener(this);
c.add(equal);
jb0=new JButton("0");
jb0.setSize(50,30);
jb0.setLocation(20,300);
jb0.addActionListener(this);
c.add(jb0);
jb1=new JButton("1");
jb1.setSize(50,30);
jb1.setLocation(20,240);
jb1.addActionListener(this);
c.add(jb1);
jb2=new JButton("2");
jb2.setSize(50,30);
jb2.setLocation(100,240);
jb2.addActionListener(this);
c.add(jb2);
jb3=new JButton("3");
jb3.setSize(50,30);
jb3.setLocation(180,240);
jb3.addActionListener(this);
c.add(jb3);
jb4=new JButton("4");
jb4.setSize(50,30);
jb4.setLocation(20,180);
jb4.addActionListener(this);
c.add(jb4);
jb5=new JButton("5");
jb5.setSize(50,30);
jb5.setLocation(100,180);
jb5.addActionListener(this);
c.add(jb5);
jb6=new JButton("6");
jb6.setSize(50,30);
jb6.setLocation(180,180);
jb6.addActionListener(this);
c.add(jb6);
jb7=new JButton("7");
jb7.setSize(50,30);
jb7.setLocation(20,120);
jb7.addActionListener(this);
c.add(jb7);
jb8=new JButton("8");
jb8.setSize(50,30);
jb8.setLocation(100,120);
jb8.addActionListener(this);
c.add(jb8);
jb9=new JButton("9");
jb9.setSize(50,30);
jb9.setLocation(180,120);
jb9.addActionListener(this);
c.add(jb9);
jbgl=new JButton("C");
jbgl.setSize(50,30);
jbgl.setLocation(100,300);
jbgl.addActionListener(this);
c.add(jbgl);
setSize(350,400);
setLocation(100,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
String str="";
if(e.getSource()==jb0){
n=n*10+0; //红色部份
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb1){
n=n*10+1;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb2){
n=n*10+2;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb3){
n=n*10+3;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb4){
n=n*10+4;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb5){
n=n*10+5;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb6){
n=n*10+6;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb7){
n=n*10+7;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb8){
n=n*10+8;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==jb9){
n=n*10+9;
str=String.valueOf(n);
jt1.setText(str);
}
if(e.getSource()==plus){
temp=Double.parseDouble(jt1.getText());
while(true){
if(flag==1){
m1=temp; //蓝色部份
m2=m1+m2;
flag=1;
break;
}
if(flag==2){
m1=temp;
m2=m2-m1;
flag=1;
break;
}
if(flag==3){
m1=temp;
m2=m2*m1;
flag=1;
break;
}
if(flag==4){
m1=temp;
m2=m2/m1;
flag=1;
break;
}
if(flag==0){
m2=temp;
flag=1;
break;
}
}
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
if(e.getSource()==minus){
temp=Double.parseDouble(jt1.getText());
while(true){
if(flag==1){
m1=temp;
m2=m1+m2;
flag=2;
break;
}
if(flag==2){
m1=temp;
m2=m2-m1;
flag=2;
break;
}
if(flag==3){
m1=temp;
m2=m2*m1;
flag=2;
break;
}
if(flag==4){
m1=temp;
m2=m2/m1;
flag=2;
break;
}
if(flag==0){
m2=temp;
flag=2;
break;
}
}
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
if(e.getSource()==multiply){
temp=Double.parseDouble(jt1.getText());
while(true){
if(flag==1){
m1=temp;
m2=m1+m2;
flag=3;
break;
}
if(flag==2){
m1=temp;
m2=m2-m1;
flag=3;
break;
}
if(flag==3){
m1=temp;
m2=m2*m1;
flag=3;
break;
}
if(flag==4){
m1=temp;
m2=m2/m1;
flag=3;
break;
}
if(flag==0){
m2=temp;
flag=3;
break;
}
}
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
if(e.getSource()==divide){
temp=Double.parseDouble(jt1.getText());
while(true){
if(flag==1){
m1=temp;
m2=m1+m2;
flag=4;
break;
}
if(flag==2){
m1=temp;
m2=m2-m1;
flag=4;
break;
}
if(flag==3){
m1=temp;
m2=m2*m1;
flag=4;
break;
}
if(flag==4){
m1=temp;
m2=m2/m1;
flag=4;
break;
}
if(flag==0){
m2=temp;
flag=4;
break;
}
}
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
if(e.getSource()==equal){
temp=Double.parseDouble(jt1.getText());
while(true){
if(flag==1){
m1=temp;
m2=m1+m2;
flag=0;
break;
}
if(flag==2){
m1=temp;
m2=m2-m1;
flag=0;
break;
}
if(flag==3){
m1=temp;
m2=m2*m1;
flag=0;
break;
}
if(flag==4){
m1=temp;
m2=m2/m1;
flag=0;
break;
}
if(flag==0){
m2=temp;
flag=0;
break;
}
}
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
if(e.getSource()==jbgl){
m1=0;
m2=0;
flag=0;
str=String.valueOf(m2);
jt1.setText(str);
n=0;
}
}
}
class Calculator{
public static void main(String args[]){
win tracy=new win();
}
}

问题1:红色部份那个n为什么要乘以10?可以不乘吗?
问题2:蓝色部份看不明白是什么意思,哪位大虾能不能给我讲一下。谢过了喔~~~~
在线关注
搜索更多相关主题的帖子: 计算器  地主  import  static  awt  

----------------解决方案--------------------------------------------------------
红色部分:其实可以这样看一下,把 n=n*10 换成 n=n*100就可以看到问题了

其实相当于 相当于把输入的数推到一位 比如,开头第一个数字系 1然后再输入2 ,按正常来说应该显示12
就是 1*10 + 2 这就是为什么要 *10 了
 应该明白吧
 
  蓝色部分: 

因为在计算机上 有几个功能键,比如 + - * % 所以用一个flag 来确定要用哪一种运算
  + 的flag 值是1
- 的flag 值是2
* 的flag 值是3
% 的flag 值是4

[此贴子已经被作者于2007-11-17 16:19:19编辑过]


----------------解决方案--------------------------------------------------------
蓝色部份能不能在详细一点呀?呵呵~~~~~
请不要嫌我烦喔~,我也只是想更多明白一点,因为我们老师没有讲到这个设置标志位。
谢过了喔,红色部份我明白了
----------------解决方案--------------------------------------------------------
不好意思喔,刚可能出现了一点小问题,我有点明白了,可是我又有问题了喔,可别嫌我烦啦
问题是这样的:
假设我现在按了三个按钮,依次是1,+,2.
上面那个程序是如何过滤掉+,而直接获取到按钮1,2的内容的?
劳烦在伤伤神,呵呵~~~~~~
----------------解决方案--------------------------------------------------------
大学互相学习嘛,怎么会说烦不烦呢?

String str="";
if(e.getSource()==jb0){ <--这里你注意到了吗?它每一个数字键都有一个标识jb0所以只有是数字键才会被这样操作n=n*10
n=n*10+0;
str=String.valueOf(n);
jt1.setText(str);
}
至于蓝色部分,其实细+心的你会发现计算机上每一个键都有一个 addActionListener方法,这样无论是哪一个键被按下,都可以知道是什么功能的键按下.
就好像,当按下了+号,在+号这一个键上的ActionListener就会发现是它按下了,作出相应的实现.
----------------解决方案--------------------------------------------------------
喔~~~~~~~~~明白了,谢谢了啊
恩,相互学习啦
呵呵~~~
----------------解决方案--------------------------------------------------------
  相关解决方案