目前计算器正常 只是有两处需要改进 本人实在做不出来 求求高手
当连着按两次符号的时候结果不对 比如 2加号减号后结果栏就会出现4
还有一点 结果栏表现形式是double形势 需要double数据 但是整数的时候也是显示一位小数点 如何改进呢?谢谢大人们了import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class MyCalculator extends JFrame implements ActionListener
{
public boolean dotExist, operated, equaled,opr; // boolean変数
private double Num1; // 目前结果
private char lastOperator; // 之前运算符
public JTextField text; // 结果栏
private JButton dot, plus, minus, multi, div, equal, clear; // 运算符
private JButton[] numbers; // 数字
//
public MyCalculator()
{
setTitle("Calculator");
// 初始化
dotExist = false; // 小数点
operated = false; // 运算符
equaled = false; // 等号
Num1= 0;lastOperator = '?';
// 初始化
text = new JTextField("0");
text.setEditable(false);
text.setHorizontalAlignment(JTextField.RIGHT);
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("/");
equal = new JButton("=");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
add(layout, text, 0, 0, 4, 1);
add(layout, numbers[1], 1, 0, 1, 1);
add(layout, numbers[2], 1, 1, 1, 1);
add(layout, numbers[3], 1, 2, 1, 1);
add(layout, numbers[4], 2, 0, 1, 1);
add(layout, numbers[5], 2, 1, 1, 1);
add(layout, numbers[6], 2, 2, 1, 1);
add(layout, numbers[7], 3, 0, 1, 1);
add(layout, numbers[8], 3, 1, 1, 1);
add(layout, numbers[9], 3, 2, 1, 1);
add(layout, dot, 4, 0, 1, 1);
add(layout, numbers[0], 4, 1, 1, 1);
add(layout, plus, 1, 3, 1, 1);
add(layout, minus, 2, 3, 1, 1);
add(layout, multi, 3, 3, 1, 1);
add(layout, div, 4, 3, 1, 1);
add(layout, equal, 4, 2, 1, 1);
add(layout, clear, 5, 0, 4, 1);}// 按钮方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)e.getSource();
if (btn == clear)
{
text.setText("0");
dotExist = false;
Num1 = 0;
lastOperator = '?';
}
else if (btn == equal)
{
op('=');}
else if (btn == plus)
{
op('+');
equaled = false;
}
else if (btn == minus)
{
op('-');
equaled = false;
}
else if (btn == multi)
{
op('*');
equaled = false;
}
else if (btn == div)
{
op('/');
equaled = false;
}
else
{
if (equaled)
Num1 = 0 ;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (text.getText().equals("0"))
text.setText("" + i) ;
else if(! operated)
text.setText(text.getText() + i);
else
{
text.setText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
text.setText(text.getText() + ".");
dotExist = true;
}
}
}
// 运算方法public void op( char operator)
{
double Num2= Double.valueOf(text.getText()).doubleValue();if (lastOperator == '?')
{
Num1 = Num2 ;
}
else if (lastOperator == '+' )
{ Num1 += Num2;}
else if (lastOperator == '-')
{
Num1 -= Num2;}
else if (lastOperator == '*')
{
Num1 *= Num2;
}
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
else if (lastOperator == '=' && equaled)
Num1 = Num2;
text.setText("" + Num1);
operated = true;
lastOperator = operator;}// 画面、GridBagLayout方法
private void add(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)
{
MyCalculator calc = new MyCalculator();
calc.setSize(290, 400);
calc.setVisible(true);
}
当连着按两次符号的时候结果不对 比如 2加号减号后结果栏就会出现4
还有一点 结果栏表现形式是double形势 需要double数据 但是整数的时候也是显示一位小数点 如何改进呢?谢谢大人们了import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class MyCalculator extends JFrame implements ActionListener
{
public boolean dotExist, operated, equaled,opr; // boolean変数
private double Num1; // 目前结果
private char lastOperator; // 之前运算符
public JTextField text; // 结果栏
private JButton dot, plus, minus, multi, div, equal, clear; // 运算符
private JButton[] numbers; // 数字
//
public MyCalculator()
{
setTitle("Calculator");
// 初始化
dotExist = false; // 小数点
operated = false; // 运算符
equaled = false; // 等号
Num1= 0;lastOperator = '?';
// 初始化
text = new JTextField("0");
text.setEditable(false);
text.setHorizontalAlignment(JTextField.RIGHT);
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("/");
equal = new JButton("=");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
add(layout, text, 0, 0, 4, 1);
add(layout, numbers[1], 1, 0, 1, 1);
add(layout, numbers[2], 1, 1, 1, 1);
add(layout, numbers[3], 1, 2, 1, 1);
add(layout, numbers[4], 2, 0, 1, 1);
add(layout, numbers[5], 2, 1, 1, 1);
add(layout, numbers[6], 2, 2, 1, 1);
add(layout, numbers[7], 3, 0, 1, 1);
add(layout, numbers[8], 3, 1, 1, 1);
add(layout, numbers[9], 3, 2, 1, 1);
add(layout, dot, 4, 0, 1, 1);
add(layout, numbers[0], 4, 1, 1, 1);
add(layout, plus, 1, 3, 1, 1);
add(layout, minus, 2, 3, 1, 1);
add(layout, multi, 3, 3, 1, 1);
add(layout, div, 4, 3, 1, 1);
add(layout, equal, 4, 2, 1, 1);
add(layout, clear, 5, 0, 4, 1);}// 按钮方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)e.getSource();
if (btn == clear)
{
text.setText("0");
dotExist = false;
Num1 = 0;
lastOperator = '?';
}
else if (btn == equal)
{
op('=');}
else if (btn == plus)
{
op('+');
equaled = false;
}
else if (btn == minus)
{
op('-');
equaled = false;
}
else if (btn == multi)
{
op('*');
equaled = false;
}
else if (btn == div)
{
op('/');
equaled = false;
}
else
{
if (equaled)
Num1 = 0 ;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (text.getText().equals("0"))
text.setText("" + i) ;
else if(! operated)
text.setText(text.getText() + i);
else
{
text.setText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
text.setText(text.getText() + ".");
dotExist = true;
}
}
}
// 运算方法public void op( char operator)
{
double Num2= Double.valueOf(text.getText()).doubleValue();if (lastOperator == '?')
{
Num1 = Num2 ;
}
else if (lastOperator == '+' )
{ Num1 += Num2;}
else if (lastOperator == '-')
{
Num1 -= Num2;}
else if (lastOperator == '*')
{
Num1 *= Num2;
}
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
else if (lastOperator == '=' && equaled)
Num1 = Num2;
text.setText("" + Num1);
operated = true;
lastOperator = operator;}// 画面、GridBagLayout方法
private void add(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)
{
MyCalculator calc = new MyCalculator();
calc.setSize(290, 400);
calc.setVisible(true);
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; public class Main extends JFrame implements ActionListener{
private JTextField resultField; //窓口
private JButton s1,s2,s3,s4,s5,s6,s7,s8,s9,s0,b1,b2,b3,b4,f1,f2,f3; //ボタン
private boolean end,add,sub,mul,div; // 演算子を判断
private String str;
private double num1,num2; //演算数字 public Main(){
super(" MyCalculator"); //名前
resultField=new JTextField("0");
resultField.setEditable(false);
resultField.setHorizontalAlignment(JTextField.RIGHT);
s1=new JButton(" 1 ");
s2=new JButton(" 2 ");
s3=new JButton(" 3 ");
s4=new JButton(" 4 ");
s5=new JButton(" 5 ");
s6=new JButton(" 6 ");
s7=new JButton(" 7 ");
s8=new JButton(" 8 ");
s9=new JButton(" 9 ");
s0=new JButton(" 0 ");
b1=new JButton(" + ");
b2=new JButton(" - ");
b3=new JButton(" * ");
b4=new JButton(" / ");
f1=new JButton(" . ");
f2=new JButton(" = ");
f3=new JButton(" C "); GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
getContentPane().setSize(300, 300);
add(layout, resultField, 0, 0, 4, 1);
add(layout, s1, 1, 0, 1, 1);
add(layout, s2, 1, 1, 1, 1);
add(layout, s3, 1, 2, 1, 1);
add(layout, s4, 2, 0, 1, 1);
add(layout, s5, 2, 1, 1, 1);
add(layout, s6, 2, 2, 1, 1);
add(layout, s7, 3, 0, 1, 1);
add(layout, s8, 3, 1, 1, 1);
add(layout, s9, 3, 2, 1, 1);
add(layout, f1, 4, 0, 1, 1);
add(layout, s0, 4, 1, 1, 1);
add(layout, b1, 1, 3, 1, 1);
add(layout, b2, 2, 3, 1, 1);
add(layout, b3, 3, 3, 1, 1);
add(layout, b4, 4, 3, 1, 1);
add(layout, f2, 4, 2, 1, 1);
add(layout, f3, 5, 0, 4, 1);
}
public void num(int i){
String s = null;
s=String.valueOf(i);
if(end){
// もしくは数字を入力した resultFieldは0になる
resultField.setText("0");
end=false; }
if((resultField.getText()).equals("0")){
//もしくは resultFieldは0だったら、数字が覆う
resultField.setText(s); }
else{
//resultFieldに0ない,配列に数字を加える
str = resultField.getText() + s;
resultField.setText(str); }
} public void actionPerformed(ActionEvent e){ //数字イベント
if(e.getSource()==s1)
num(1);
else if(e.getSource()==s2)
num(2);
else if(e.getSource()==s3)
num(3);
else if(e.getSource()==s4)
num(4);
else if(e.getSource()==s5)
num(5);
else if(e.getSource()==s6)
num(6);
else if(e.getSource()==s7)
num(7);
else if(e.getSource()==s8)
num(8);
else if(e.getSource()==s9)
num(9);
else if(e.getSource()==s0)
num(0); //演算子イベント
else if(e.getSource()==b1)
sign(1);
else if(e.getSource()==b2)
sign(2);
else if(e.getSource()==b3)
sign(3);
else if(e.getSource()==b4)
sign(4);
else if(e.getSource()==f3)
sign(5);
//イコール
else if(e.getSource()==f1){
str=resultField.getText();
if(str.indexOf(".") <=1){
str+=".";
resultField.setText(str);
}
}
else if(e.getSource()==f2){
num2=Double.parseDouble(resultField.getText());
if(add){
num1=num1 + num2;}
else if(sub){
num1=num1 - num2;}
else if(mul){
num1=num1 * num2;}
else if(div){
num1=num1 / num2;}
resultField.setText(String.valueOf(num1));
end=true;
} }
public void sign(int s){
if(s==1){
add=true;
sub=false;
mul=false;
div=false;
}
else if(s==2){
add=false;
sub=true;
mul=false;
div=false;
}
else if(s==3){
add=false;
sub=false;
mul=true;
div=false;
}
else if(s==4){
add=false;
sub=false;
mul=false;
div=true;
}
else if(s==5){
add=false;
sub=false;
mul=false;
div=false;
num1 = 0;
num2 = 0;
resultField.setText("0");
}
num1=Double.parseDouble(resultField.getText());
end=true;
}
public static void main(String[] args){
Main th1=new Main();
th1.pack();
th1.show();
} private void add(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);
}
}
这个呢
import java.awt.*;
import java.awt.event.*; public class ZhuLei extends JFrame implements ActionListener
{
public boolean dotExist, operated, equaled,opr; // boolean変数
private double Num1; // 目前结果
private char lastOperator; // 之前运算符
public JTextField text; // 结果栏
private JButton dot, plus, minus, multi, div, equal, clear; // 运算符
private JButton[] numbers; // 数字
//
public ZhuLei()
{
setTitle("Calculator");
// 初始化
dotExist = false; // 小数点
operated = false; // 运算符
equaled = false; // 等号
Num1= 0; lastOperator = '?';
// 初始化
text = new JTextField("0");
text.setEditable(false);
text.setHorizontalAlignment(JTextField.RIGHT);
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("/");
equal = new JButton("=");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
add(layout, text, 0, 0, 4, 1);
add(layout, numbers[1], 1, 0, 1, 1);
add(layout, numbers[2], 1, 1, 1, 1);
add(layout, numbers[3], 1, 2, 1, 1);
add(layout, numbers[4], 2, 0, 1, 1);
add(layout, numbers[5], 2, 1, 1, 1);
add(layout, numbers[6], 2, 2, 1, 1);
add(layout, numbers[7], 3, 0, 1, 1);
add(layout, numbers[8], 3, 1, 1, 1);
add(layout, numbers[9], 3, 2, 1, 1);
add(layout, dot, 4, 0, 1, 1);
add(layout, numbers[0], 4, 1, 1, 1);
add(layout, plus, 1, 3, 1, 1);
add(layout, minus, 2, 3, 1, 1);
add(layout, multi, 3, 3, 1, 1);
add(layout, div, 4, 3, 1, 1);
add(layout, equal, 4, 2, 1, 1);
add(layout, clear, 5, 0, 4, 1); } // 按钮方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)e.getSource();
if (btn == clear)
{
text.setText("0");
dotExist = false;
Num1 = 0;
lastOperator = '?';
}
else if (btn == equal)
{
op('='); }
else if (btn == plus)
{
op('+');
equaled = false;
}
else if (btn == minus)
{
op('-');
equaled = false;
}
else if (btn == multi)
{
op('*');
equaled = false;
}
else if (btn == div)
{
op('/');
equaled = false;
}
else
{
if (equaled)
Num1 = 0 ;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (text.getText().equals("0"))
text.setText("" + i) ;
else if(! operated)
text.setText(text.getText() + i);
else
{
text.setText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
text.setText(text.getText() + ".");
dotExist = true;
}
}
}
// 运算方法
public void op( char operator)
{
char lastOperator1=operator;
double Num2= Double.valueOf(text.getText()).doubleValue();
if (lastOperator == '?')
{
Num1 = Num2 ;
}
else if (lastOperator != '?'&& lastOperator1=='+')
{ if (lastOperator == '+')
{ Num1 += Num2;
}
else if (lastOperator == '-')
{
Num1 -= Num2; }
else if (lastOperator == '*')
{
Num1 *= Num2; }
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
}
else if (lastOperator != '?'&& lastOperator1=='-')
{
if (lastOperator == '+')
{ Num1 += Num2;
}
else if (lastOperator == '-')
{
Num1 -= Num2; }
else if (lastOperator == '*')
{
Num1 *= Num2; }
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
} }
else if (lastOperator != '?'&& lastOperator1=='*')
{
if (lastOperator == '+')
{ Num1 += Num2;
}
else if (lastOperator == '-')
{
Num1 -= Num2; }
else if (lastOperator == '*')
{
Num1 *= Num2; }
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
}
else if (lastOperator != '?'&& lastOperator1=='/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
else if (lastOperator != '?'&& lastOperator1=='=')
{
if (lastOperator == '+')
{ Num1 += Num2;
}
else if (lastOperator == '-')
{
Num1 -= Num2; }
else if (lastOperator == '*')
{
Num1 *= Num2; }
else if (lastOperator == '/')
{
{
if(Num2 != 0)
Num1 /= Num2;
else
new Exception("Error");
}
lastOperator = operator;
}
}
text.setText("" + Num1);
operated = true;
lastOperator=operator;} // 画面、GridBagLayout方法
private void add(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)
{
ZhuLei calc = new ZhuLei();
calc.setSize(290, 400);
calc.setVisible(true);
}
}这是刚才修改的,,虽然多点代码,,