我在用JBuilder做个小的计算器,现做出+-*/四则运算。有几个小问题想问问各位。
1. 把界面都已经做出来了,每个数字都为jbutton.但这样一来,我不知道当我按了button以后他应该返回什么了,是不是把void改成Int,里面包含两句表达式第一句是让显示出来,第二句是返回数字?
2. 然后当按+-*/四个按键中的一个时,不同的按键调用不同的方法,最后返回出来接过,再通过一个button让这个结果显示在lable上。但如何不让当你同时按两个或两个以上的算法出错?还有,这个的计算到底在什么位置应该?因为方法需要两个参数,而使用运算键是在第二个之前。这个应该怎么解决?
1. 把界面都已经做出来了,每个数字都为jbutton.但这样一来,我不知道当我按了button以后他应该返回什么了,是不是把void改成Int,里面包含两句表达式第一句是让显示出来,第二句是返回数字?
2. 然后当按+-*/四个按键中的一个时,不同的按键调用不同的方法,最后返回出来接过,再通过一个button让这个结果显示在lable上。但如何不让当你同时按两个或两个以上的算法出错?还有,这个的计算到底在什么位置应该?因为方法需要两个参数,而使用运算键是在第二个之前。这个应该怎么解决?
计算可以用一个小的技巧 以a+b+c 为例你要把它看成0+a+b+c 令sum1 = 0 sign ='+' 输入a时 sum2=a 在输入+时进行计算 就是0+a的值 sum1 = sum1+sum2 以后sum1就是保留上次计算的结果sum2为第二个计算的数 每次输入+-*/时进行计算 这样就可以实现连续运算了
还有这个计算,你说的设两个变量我明白,但在点“+”这个button时,监听所要做的就是计算这两个变量。但又出现一个上下连接的问题:这两个变量如何找到相应的数(在第一个问题解决了以后)?是不是sum1是不需要赋值的(因为初始化和不断的更新),然后只需要把运算button后的数字赋给sum2就可以了,然后等待第2个运算button来进行上一次的两数运算?但这又应生出一个问题:如何判断运算符为结束?
计算的问题就是sum1保存上一次的值 sum2 为新输入的值。
下面是我写的一点片断
public void actionPerformed(ActionEvent e) throws ArithmeticException{
String s = e.getActionCommand();
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '.':
if(sign)
{
t.setText(s);
sign = false;
}
else{
t.setText(t.getText() + s);
}
break;
case '+':
case '-':
case '*':
case '/':
{
c_sign = s;
sum1 =Double.parseDouble(t.getText());
t.setText("");
}
break;
case '=':
{
sum2 = Double.parseDouble(t.getText());
t.setText("");
sign = true;
if(c_sign == "+"){
sum1+=sum2;
}
else if(c_sign == "-"){
sum1-=sum2;
}
else if(c_sign == "*"){
sum1*=sum2;
}
else if(c_sign == "/"){
sum1/=sum2;
}
t.setText(""+sum1);
}
break;
}
}
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Calculator extends JFrame implements ActionListener {private String[] name_north = {"Backspace", " CE ", " C "};
private String[] name_left = {"MC", "MR", "MS", "M+"};
private String[] name_right = {"sqrt", "%", "1/x", "="};
private String[] name_center = {"7", "8", "9", "/", "4", "5", "6", "*", "1",
"2", "3", "-", "0", "+/-", ".", "+"};private JButton[] button_north = new JButton[name_north.length];
private JButton[] button_left = new JButton[name_left.length];
private JButton[] button_right = new JButton[name_right.length];
private JButton[] button_center = new JButton[name_center.length];private String s = "";
private boolean sign = true;
private double sum1= 0.0;
private double sum2;
private double x;
private double y;
private char sign_js = '+';
private char sign_dy ;
private boolean flag = true;
private boolean biaoji_dy = true; JMenuBar mb = new JMenuBar();
JMenu m_edit = new JMenu("编辑");
JMenu m_view = new JMenu("查看");
JMenu m_help = new JMenu("帮助");
JMenuItem m1_copy = new JMenuItem("复制");
JMenuItem m1_paste = new JMenuItem("粘贴");
JMenuItem m2_biaozhun = new JMenuItem("标准型");
JMenuItem m2_kexue = new JMenuItem("科学型");
JMenuItem m2_num_group = new JMenuItem("数字分组");
JMenuItem m3_help = new JMenuItem("帮助");
JMenuItem m3_about = new JMenuItem("关于");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();
JPanel p6 = new JPanel();static JTextField t = new JTextField("0", 15);
public Calculator() {
JFrame f = new JFrame("计算器");
mb.add(m_edit);
mb.add(m_view);
mb.add(m_help);
f.setJMenuBar(mb);
m_edit.add(m1_copy);
m_edit.add(m1_paste);
m_view.add(m2_biaozhun);
m_view.add(m2_kexue);
m_view.add(m2_num_group);
m_help.add(m3_help);
m_help.add(m3_about);f.setLayout(new BorderLayout(4, 4));
f.add(t, BorderLayout.NORTH);
t.addActionListener(this);
t.setEditable(false);
t.setHorizontalAlignment(JTextField.RIGHT);
f.add(p2, BorderLayout.CENTER);
p2.setLayout(new BorderLayout(5, 5));
p2.add(p3, BorderLayout.NORTH);
p2.add(p4, BorderLayout.WEST);
p2.add(p5, BorderLayout.EAST);
p2.add(p6, BorderLayout.CENTER);
// p3.setLayout(new FlowLayout(FlowLayout.RIGHT));
p3.setLayout(new GridLayout(1, 4, 4, 4));
for (int i = 0; i < button_north.length; i++) {
button_north[i] = new JButton(name_north[i]);
button_north[i].setForeground(Color.red);
p3.add(button_north[i]);
button_north[i].addActionListener(this);
}
p4.setLayout(new GridLayout(4, 1, 4, 4));
for (int j = 0; j < button_left.length; j++) {
button_left[j] = new JButton(name_left[j]);
button_left[j].setForeground(Color.red);
p4.add(button_left[j]);
}
p5.setLayout(new GridLayout(4, 1, 4, 4));
for (int i = 0; i < button_right.length; i++) {
button_right[i] = new JButton(name_right[i]);
button_right[i].setForeground(Color.red);
p5.add(button_right[i]);
button_right[i].addActionListener(this);
}
p6.setLayout(new GridLayout(4, 4, 4, 4));
for (int i = 0; i < button_center.length; i++) {
button_center[i] = new JButton(name_center[i]);
button_center[i].setForeground(Color.BLUE);
p6.add(button_center[i]);button_center[i].addActionListener(this);
}f.setSize(300,300);
f.setBackground(new Color(230, 228, 210));
f.setVisible(true);
f.pack();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});}public void actionPerformed(ActionEvent e) throws ArithmeticException{
String s = e.getActionCommand();
switch(s.charAt(0)){
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':{
if(sign)
{
t.setText(s);
sign = false;}
else if((Double.parseDouble(t.getText())== 0)&&s=="0"){
t.setText("0");
sign = true;
}else if(Double.parseDouble(t.getText())!= 0){
t.setText(t.getText() + s);}
else{
//t.setText("");
t.setText(t.getText() + s);
}
flag =true;}
break;
case '.':
if(t.getText().contains(".")){
t.setText("");
t.setText("已经输入了小数点");
for(int i =0;i<button_center.length;i++)
{
button_center[i].setEnabled(false);
}
}else if(sign==false)
{
t.setText(t.getText() + s);
flag =true;}
else {
if(Double.parseDouble(t.getText())== 0){
t.setText("0.");
sign = false;
flag = true;
}
}break;case '+':
case '-':
case '*':
case '/':
{ if(flag == true){System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
sum2=Double.parseDouble((t.getText()));
System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
t.setText("");
sign = true;
if(sign_js =='+'){
sum1 += sum2;
t.setText(""+sum1);
}
else if(sign_js =='-'){
sum1 -= sum2;
t.setText(""+sum1);
}
else if(sign_js =='*'){
sum1 *= sum2;
t.setText(""+sum1);
}
else if(sign_js =='/'){
if(sum2 != 0){sum1 /= sum2;
t.setText(""+sum1);
}else{
for(int i =0;i<button_right.length;i++)
{
button_right[i].setEnabled(false);
}
for(int i =0;i<button_center.length;i++)
{
button_center[i].setEnabled(false);
}
t.setText("ERROR");}
}System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2);
sign_js =s.charAt(0) ;
t.setText(""+sum1);
flag = false;
System.out.println(flag);
}else {
t.setText(""+sum1);
sign_js = s.charAt(0);
sign_dy = sign_js;
flag = false;
sign = true;
}
biaoji_dy = true; }
break;case '=':
{
if(biaoji_dy){
if(sign_dy !='=')
{System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);
sum2 = Double.valueOf(t.getText());if(sign_js =='+'){
sum1 += sum2;
t.setText(""+sum1);
}
else if(sign_js =='-'){
sum1 -= sum2;
t.setText(""+sum1);
}
else if(sign_js =='*'){
sum1 *= sum2;
t.setText(""+sum1);}
else if(sign_js =='/'){
if(sum2 != 0){sum1 /= sum2;
t.setText(""+sum1);
}else{
for(int i =0;i<button_right.length;i++)
{
button_right[i].setEnabled(false);
}
for(int i =0;i<button_center.length;i++)
{
button_center[i].setEnabled(false);
}
t.setText("ERROR");}
}System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);sign_dy = '=';
} else
{
x = sum2;
if(sign_js =='+'){
sum1 += sum2;
t.setText(""+sum1);
}
else if(sign_js =='-'){
sum1 -= sum2;
t.setText(""+sum1);
}
else if(sign_js =='*'){
sum1 *= sum2;
t.setText(""+sum1);
}
else if(sign_js =='/'){
if(sum2 != 0){sum1 /= sum2;
t.setText(""+sum1);
}else{
for(int i =0;i<button_right.length;i++)
{
button_right[i].setEnabled(false);
}
for(int i =0;i<button_center.length;i++)
{
button_center[i].setEnabled(false);
}
t.setText("ERROR");}
}System.out.println("Sum1 = "+sum1 +"Sum2 = "+sum2+"X = "+x+"sign_dy = "+sign_dy);} }
else {}flag = false;
sign = true;
}
break;
public static void main(String[] args) {Calculator c = new Calculator();
}
}
代码也有说明
你可以看下
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;public class calculator extends JFrame implements ActionListener
{
JTextField jtext;
JButton[] num=new JButton[10];
JButton a,b,c,d,h,f,down;
double n1,n2,n3,n4,n5;
char t;
double result; public calculator()
{
Container con=getContentPane();
con.setLayout(new BorderLayout());
jtext=new JTextField(11);
jtext.setVisible(true);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel(); p1.setLayout(new GridLayout(3,3,2,2));
p2.setLayout(new GridLayout(3,2,2,2));
p3.setLayout(new GridLayout(1,1,1,1));
//用循环添加数字1~9 为各自注册监听器 ,并将其添加到面板p1
for (int i=0;i<9;i++)
{
num[i]=new JButton(""+(i+1));
p1.add(num[i]);
num[i].addActionListener(this);
}
//添加按钮0 + - * /
JButton a=new JButton(""+0);
JButton b=new JButton("AC");
c=new JButton("+");
d=new JButton("-");
h=new JButton("*");
f=new JButton("/");
down=new JButton("=");
//为0 + - * /各自注册监听器
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);
d.addActionListener(this);
h.addActionListener(this);
f.addActionListener(this);
down.addActionListener(this);
p2.add(a);
p2.add(b);
p2.add(c);
p2.add(d);
p2.add(h);
p2.add(f);
p3.add(down);
con.add(p1,BorderLayout.CENTER);
con.add(jtext,BorderLayout.NORTH);
con.add(p2,BorderLayout.EAST);
con.add(p3,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<9;i++)
{
if(e.getSource().equals(num[i]))
jtext.setText(jtext.getText()+e.getActionCommand());
}
if(e.getSource()==b)
jtext.setText("");
if(e.getSource()==a)
jtext.setText(jtext.getText()+e.getActionCommand());
if(e.getSource()==c)
{
n1=Double.parseDouble(jtext.getText());
jtext.setText("");
t='+';
}
if(e.getSource()==d)
{
n2=Double.parseDouble(jtext.getText());
jtext.setText("");
t='-';
}
if(e.getSource()==h)
{
n3=Double.parseDouble(jtext.getText());
jtext.setText("");
t='*';
}
if(e.getSource()==f)
{
n4=Double.parseDouble(jtext.getText());
jtext.setText("");
t='/';
}
if(e.getSource().equals(down))
{
n5=Double.parseDouble(jtext.getText());
switch(t)
{
case '+':
{
result=n1+n5;
jtext.setText(""+result);
break;
}
case'-':
{
result=n2-n5;
jtext.setText(""+result);
break;
}
case'*':
{
result=n3*n5;
jtext.setText(""+result);
break;
}
case '/':
{
if(n4!=0)
{
result=n4/n5;
jtext.setText(""+result);
}
break;
}
}
}
}
public static void main(String[] args)
{
calculator cal=new calculator();
cal.setSize(270,270);
cal.setVisible(true);
}
}