这是一个很简单的计算器,当除数为0时为什么不能作出错误提示呢?是哪里出错了??
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
//显示计算器结果的窗体
class Result extends JPanel{
JTextField text=new JTextField("0");
Result(){
text.setHorizontalAlignment(SwingConstants.LEFT);
text.enable(false);
setLayout(new BorderLayout());
add(text,BorderLayout.CENTER);
}
}
//计算器数字按纽定义面板
class Number_Key extends JPanel{
JButton one=new JButton(" 1 ");
JButton two=new JButton(" 2 ");
JButton three=new JButton(" 3 ");
JButton plus=new JButton(" + ");
JButton ce=new JButton(" C ");
JButton four=new JButton(" 4 ");
JButton five=new JButton(" 5 ");
JButton six=new JButton(" 6 ");
JButton sub=new JButton(" - ");
JButton b=new JButton(" B ");
JButton seven=new JButton(" 7 ");
JButton eight=new JButton(" 8 ");
JButton nine=new JButton(" 9 ");
JButton mul=new JButton(" * ");
JButton ds=new JButton("1/x");
JButton zero=new JButton(" 0 ");
JButton zf=new JButton("+/-");
JButton point=new JButton(" . ");
JButton div=new JButton(" / ");
JButton equal=new JButton(" = ");
Number_Key(){
setLayout(new GridLayout(4,5,10,10));
add(one);
add(two);
add(three);
add(plus);
add(ce);
add(four);
add(five);
add(six);
add(sub);
add(b);
add(seven);
add(eight);
add(nine);
add(mul);
add(ds);
add(zero);
add(zf);
add(point);
add(div);
add(equal);
}
}
//计算器主类
public class Calculator extends JFrame implements ActionListener
{
Result result =new Result(); //定义text的面板
Number_Key number_key =new Number_Key(); //定义按钮面板
boolean com=false;//当单击按钮+/-/*/ /时,com=true
int i=0;//当i=0时说明是我们第一次输入,字符串sum不会累加
String sum="";//存放text的内容
int flag=1;//判断是不是第一次点击运算符 1表是 0表否
int backspace=1;//判断退格键是否有效 1表有效 0表否
int click_ysf=0;//判断上一次点击的是不是运算符 1表是 0表否
double num1,num2,ad;//
double total=0;//存放单击按钮+,-,*,/之前的数值
int symbol=0; //+,-,*,/的代号分别为1,2,3,4
Calculator(){
super("Calculator"); //设定标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定关闭窗体时退出程序
JPanel pane=new JPanel(); //定义主面板
pane.setLayout(new BorderLayout());
pane.add(result,BorderLayout.NORTH);
pane.add(number_key,BorderLayout.SOUTH);
number_key.one.addActionListener(this); //添加监听事件
number_key.two.addActionListener(this);
number_key.three.addActionListener(this);
number_key.four.addActionListener(this);
number_key.five.addActionListener(this);
number_key.six.addActionListener(this);
number_key.seven.addActionListener(this);
number_key.eight.addActionListener(this);
number_key.nine.addActionListener(this);
number_key.zero.addActionListener(this);
number_key.ce.addActionListener(this);
number_key.plus.addActionListener(this);
number_key.equal.addActionListener(this);
number_key.sub.addActionListener(this);
number_key.mul.addActionListener(this);
number_key.div.addActionListener(this);
number_key.b.addActionListener(this);
number_key.ds.addActionListener(this);
number_key.zf.addActionListener(this);
number_key.point.addActionListener(this);
setContentPane(pane);
pack(); //初始化窗体大小为正好盛放所有按钮
}
void jisuan(double a,double b,int c)
{
switch(symbol){
case 1://加法
{
ad=a+b;
result.text.setText(ad+"");
break;
}
case 2://减法
{
ad=a-b;
result.text.setText(String.valueOf(ad));
break;
}
case 3://乘法
{
ad=a*b;
result.text.setText(ad+"");
break;
}
case 4://除法
{
if(b!=0)
{
ad=a/b;
result.text.setText(ad+"");
}
else{
result.text.setText("False!");
//System.out.println("False");
}
System.out.println((int)b);
break;
}
}
num1=ad;
}
还没有发完 接着下面的回贴
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
//显示计算器结果的窗体
class Result extends JPanel{
JTextField text=new JTextField("0");
Result(){
text.setHorizontalAlignment(SwingConstants.LEFT);
text.enable(false);
setLayout(new BorderLayout());
add(text,BorderLayout.CENTER);
}
}
//计算器数字按纽定义面板
class Number_Key extends JPanel{
JButton one=new JButton(" 1 ");
JButton two=new JButton(" 2 ");
JButton three=new JButton(" 3 ");
JButton plus=new JButton(" + ");
JButton ce=new JButton(" C ");
JButton four=new JButton(" 4 ");
JButton five=new JButton(" 5 ");
JButton six=new JButton(" 6 ");
JButton sub=new JButton(" - ");
JButton b=new JButton(" B ");
JButton seven=new JButton(" 7 ");
JButton eight=new JButton(" 8 ");
JButton nine=new JButton(" 9 ");
JButton mul=new JButton(" * ");
JButton ds=new JButton("1/x");
JButton zero=new JButton(" 0 ");
JButton zf=new JButton("+/-");
JButton point=new JButton(" . ");
JButton div=new JButton(" / ");
JButton equal=new JButton(" = ");
Number_Key(){
setLayout(new GridLayout(4,5,10,10));
add(one);
add(two);
add(three);
add(plus);
add(ce);
add(four);
add(five);
add(six);
add(sub);
add(b);
add(seven);
add(eight);
add(nine);
add(mul);
add(ds);
add(zero);
add(zf);
add(point);
add(div);
add(equal);
}
}
//计算器主类
public class Calculator extends JFrame implements ActionListener
{
Result result =new Result(); //定义text的面板
Number_Key number_key =new Number_Key(); //定义按钮面板
boolean com=false;//当单击按钮+/-/*/ /时,com=true
int i=0;//当i=0时说明是我们第一次输入,字符串sum不会累加
String sum="";//存放text的内容
int flag=1;//判断是不是第一次点击运算符 1表是 0表否
int backspace=1;//判断退格键是否有效 1表有效 0表否
int click_ysf=0;//判断上一次点击的是不是运算符 1表是 0表否
double num1,num2,ad;//
double total=0;//存放单击按钮+,-,*,/之前的数值
int symbol=0; //+,-,*,/的代号分别为1,2,3,4
Calculator(){
super("Calculator"); //设定标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设定关闭窗体时退出程序
JPanel pane=new JPanel(); //定义主面板
pane.setLayout(new BorderLayout());
pane.add(result,BorderLayout.NORTH);
pane.add(number_key,BorderLayout.SOUTH);
number_key.one.addActionListener(this); //添加监听事件
number_key.two.addActionListener(this);
number_key.three.addActionListener(this);
number_key.four.addActionListener(this);
number_key.five.addActionListener(this);
number_key.six.addActionListener(this);
number_key.seven.addActionListener(this);
number_key.eight.addActionListener(this);
number_key.nine.addActionListener(this);
number_key.zero.addActionListener(this);
number_key.ce.addActionListener(this);
number_key.plus.addActionListener(this);
number_key.equal.addActionListener(this);
number_key.sub.addActionListener(this);
number_key.mul.addActionListener(this);
number_key.div.addActionListener(this);
number_key.b.addActionListener(this);
number_key.ds.addActionListener(this);
number_key.zf.addActionListener(this);
number_key.point.addActionListener(this);
setContentPane(pane);
pack(); //初始化窗体大小为正好盛放所有按钮
}
void jisuan(double a,double b,int c)
{
switch(symbol){
case 1://加法
{
ad=a+b;
result.text.setText(ad+"");
break;
}
case 2://减法
{
ad=a-b;
result.text.setText(String.valueOf(ad));
break;
}
case 3://乘法
{
ad=a*b;
result.text.setText(ad+"");
break;
}
case 4://除法
{
if(b!=0)
{
ad=a/b;
result.text.setText(ad+"");
}
else{
result.text.setText("False!");
//System.out.println("False");
}
System.out.println((int)b);
break;
}
}
num1=ad;
}
还没有发完 接着下面的回贴
{
com=true;
i=0;
if(flag==1)//第一次点击运算符
{
num1=Double.parseDouble(result.text.getText());
}
else if(flag==0&&click_ysf==0)//累加,防止用户多次点击运算符
{
num2=Double.parseDouble(result.text.getText());
jisuan(num1,num2,symbol);
}
sum="";
symbol=k;
backspace=0;//点击运算符后退格无效
click_ysf=1;//标记上一次点击了运算符
flag=0;//标记不是第一次点击运算符
}
void clicknum(int n)//点击1-9数字键,参数n为点击的数字
{
sum=result.text.getText();
if(com || i==0||Double.parseDouble(sum)==0&&sum.length()<=1)
{
result.text.setText(""+n+"");
com=false;
i=1;
}
else
{
result.text.setText(sum+""+n+"");
}
backspace=1;//退格有效
click_ysf=0;//标记上一次不是点击了运算符
}
//各个按钮触发的事件
public void actionPerformed (ActionEvent e){
/*如果是单击数字按钮那么先要判断是否在此之前单击了+,-,*,/,=,如果是,那么
com=true,如果没有,com=false;或者是否单击数字键,如果是,i=1,如果没有,i=0;*/ if (e.getSource()==number_key.one){
clicknum(1);
}
else if (e.getSource()==number_key.two){
clicknum(2);
}
else if (e.getSource()==number_key.three){
clicknum(3);
}
else if (e.getSource()==number_key.four){
clicknum(4);
}
else if (e.getSource()==number_key.five){
clicknum(5);
}
else if (e.getSource()==number_key.six){
clicknum(6);
}
else if (e.getSource()==number_key.seven){
clicknum(7);
}
else if (e.getSource()==number_key.eight){
clicknum(8);
}
else if (e.getSource()==number_key.nine){
clicknum(9);
}
else if (e.getSource()==number_key.zero){
if(com || i==0)
{
result.text.setText("0");
com=false;
i=1;
}
else
{
sum=result.text.getText();
if (Float.parseFloat(sum)>0||Float.parseFloat(sum)<0){
result.text.setText(sum+"0");
}
else{
if(sum.trim().indexOf(".")==-1){
result.text.setText(sum);}
else{
result.text.setText(sum+"0");
}
}
}
}
else if(e.getSource()==number_key.ce){
result.text.setText("0");
i=0;
flag=1;
com=true;
num1=0;
num2=0;
backspace=1;
click_ysf=0;
}
else if(e.getSource()==number_key.ds){ //倒数
num1=Double.parseDouble(result.text.getText());
if(num1!=0)
{
ad=1/num1;
result.text.setText(ad+"");
}
else
result.text.setText("False!");
com=false;
i=0;
flag=1;
}
else if(e.getSource()==number_key.b){ //回退
if(backspace==1){//允许点击回退
sum=result.text.getText();
if(sum.length()>1){//2个以上字符
sum=sum.substring(0, sum.length() - 1);
result.text.setText(sum);
if(sum.length()==1&&"-".compareTo(sum)==0)
result.text.setText("0");
}
else if(sum.length()==1)//单个字符
result.text.setText("0");
}
}
else if(e.getSource()==number_key.zf){ //+/-号
Double k=Double.parseDouble(result.text.getText());
sum=result.text.getText();
if(k>0){//正数
result.text.setText("-"+sum);
}
else if(k<0)//负数
{
sum=sum.substring(1, sum.length());
result.text.setText(sum);
}
num1=-k;//记录第一个操作数
}
/*不让一个整数出现2个以上的小数点,具体做法是:判断是否已经存在,存在就不添加,不存在就添加*/
else if (e.getSource()==number_key.point){
if(com||i==0){
result.text.setText("0.");
com=false;
i=1;
}
else{
sum=result.text.getText();
if(sum.trim().indexOf(".")==-1)
{
result.text.setText(sum+".");
}
else
{
result.text.setText(sum);
}
}
click_ysf=0;
}//获取单击+之前的数值
else if(e.getSource()==number_key.plus){
gets(1);
}//获取单击-之前的数值
else if(e.getSource()==number_key.sub){
gets(2);
}//获取单击*之前的数值
else if(e.getSource()==number_key.mul){
gets(3);
}//获取单击/之前的数值
else if(e.getSource()==number_key.div){
gets(4);
}
else if(e.getSource()==number_key.equal){
gets(symbol);
}
}
public static void main(String[] args){
Calculator calculator=new Calculator();
calculator.show();
}
}
backspace=1;//退格有效
click_ysf=0;//标记上一次不是点击了运算符
也就是以下代码的前面:
}
else if(e.getSource()==number_key.ce){