⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 一个简单的计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                           }
      else 
      { MainFrame.text.setText(" "+approximation(MainFrame.answear));
        MainFrame.computable=true;
      }
    }
    else if((e.getSource()==MainFrame.rbutton[2])&&(MainFrame.computable))//如果是“sqrt”
    { MainFrame.ysf="sqrt";
      comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="=";
      MainFrame.start=true;
      if(MainFrame.error1) { MainFrame.text.setText("函数输入无效");
                             MainFrame.computable=false;
                             MainFrame.error1=false;
                           }
      else 
      { MainFrame.text.setText(" "+approximation(MainFrame.answear));
        MainFrame.computable=true;
      }
    }
    else if((e.getSource()==MainFrame.rbutton[6])&&(MainFrame.computable))//如果是“x^y”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="x^y";
      MainFrame.start=true;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
     else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));
       MainFrame.computable=true;
     }
        
    }
    else if((e.getSource()==MainFrame.rbutton[3])&&(MainFrame.computable))//如果是“ln”
    { MainFrame.ysf="ln";
      comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="=";
      MainFrame.start=true;
      if(MainFrame.error1) { MainFrame.text.setText("函数输入无效");
                             MainFrame.computable=false;
                             MainFrame.error1=false;
                           }
      else 
      { MainFrame.text.setText(" "+approximation(MainFrame.answear));
        MainFrame.computable=true;
      }
    }
    else if((e.getSource()==MainFrame.rbutton[7])&&(MainFrame.computable))//如果是“%”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="%";
      MainFrame.start=true;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                           }
     else 
     { MainFrame.text.setText(" "+MainFrame.answear);
       MainFrame.computable=true;
     }
    }
    else if((e.getSource()==MainFrame.rbutton[11])&&(MainFrame.computable))//如果是1/x
    { MainFrame.ysf="1/x";
      comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="=";
      MainFrame.start=true;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                           }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));
       MainFrame.computable=true;
     }
    }
    else if((e.getSource()==MainFrame.rbutton[15])&&(MainFrame.computable))//如果是“=”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="=";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
      else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
      else { MainFrame.text.setText(" "+approximation(MainFrame.answear));
             MainFrame.computable=true;
           }
    
    }
    else if(e.getSource()==MainFrame.rbutton[14])//如果是“CE”,则所有的标志回到初始状态
    { MainFrame.start=true;
      MainFrame.text.setText("0");
      MainFrame.ysf="=";
      MainFrame.point=false;
      MainFrame.answear=0;
      MainFrame.fnumber=false;
      MainFrame.negtive=false;
      MainFrame.error=false;
      MainFrame.error1=false;
    }
    else if((e.getSource()==MainFrame.rbutton[13])&&(MainFrame.computable))//如果是退格键
    { a=MainFrame.text.getText();
      if(a.length()>1)
      { a = MainFrame.text.getText().substring(0, MainFrame.text.getText().length()-1);
        MainFrame.text.setText(a);
      }
      else { MainFrame.text.setText("0");
             MainFrame.start=true;
             a="0";//防止a的长度为0而使退格键失效
           }
    }
  }
    
  public double nexponent(double n)//求x的y次方
  { double m=1;
  	for(int i=0;i<n;i++)
  	{ m*=MainFrame.answear;
  	  if((Double.MAX_VALUE/m)<(m))
  	  { MainFrame.error2=true;
  	    return 0;
  	  }
  	}
  	return m;
  }
  
  public double approximation(double x)//四舍五入取5位小数
  { int m;
    int n;
    x*=1000000;
    m=(int)x;
    n=m%10;
    if(n>=5) { m=m/10+1; }
    else m=m/10;
    x=m;
    x/=100000;
    return x;
  }
  
  public void comput(double n)//计算,并将结果返回
  { if(MainFrame.ysf.equals("+")) { MainFrame.answear+=n; }
    if(MainFrame.ysf.equals("-")) { MainFrame.answear-=n; }
    if(MainFrame.ysf.equals("*")) { MainFrame.answear*=n; }
    if(MainFrame.ysf.equals("/")) { if(n==0) { MainFrame.error=true; }
                                     else 
                                     MainFrame.answear/=n; }
    if(MainFrame.ysf.equals("=")) { MainFrame.answear=n; }
    if(MainFrame.ysf.equals("sin")) { MainFrame.answear=Math.sin(Math.toRadians(n)); }
    if(MainFrame.ysf.equals("cos")) { MainFrame.answear=Math.cos(Math.toRadians(n)); }
    if(MainFrame.ysf.equals("tan")) { if(((int)n%90)==0&&((int)n%180!=0)) { MainFrame.error1=true; }
                                         else MainFrame.answear=Math.tan(Math.toRadians(n)); }
    if(MainFrame.ysf.equals("cot")) { if(((int)n%90)==0&&((int)n%180!=0)) { MainFrame.error1=true; }
                                         else MainFrame.answear=1/Math.tan(Math.toRadians(n)); }
    if(MainFrame.ysf.equals("x^y")) { MainFrame.answear=nexponent(n); }
    if(MainFrame.ysf.equals("sqrt")) {  if(n<0) { MainFrame.error1=true; }
                                         else MainFrame.answear=Math.sqrt(n); }
    if(MainFrame.ysf.equals("1/x")) { if(n==0) { MainFrame.error=true; }
                                      else MainFrame.answear=1/n; }
    if(MainFrame.ysf.equals("ln")) { if(n<=0) { MainFrame.error1=true; }
                                     else MainFrame.answear=Math.log(n); }
    if(MainFrame.ysf.equals("%")) { if(n==0) { MainFrame.error=true; }
                                    else MainFrame.answear=(int)MainFrame.answear%(int)n; }
  }
  
  public void keyTyped(KeyEvent e)//键盘事件处理
  { char s=e.getKeyChar();
    if(('0'<s)&&(s<='9')) //如果是1-9数字键
    { if(MainFrame.start) 
      { MainFrame.text.setText(""+s); 
      	MainFrame.fnumber=true; 
      }
       else { MainFrame.text.setText(MainFrame.text.getText()+s); 
       	      MainFrame.fnumber=true;
            }
      MainFrame.start=false;
      MainFrame.computable=true;
    }
    else if(s=='0')//如果是数字键0
    { if(MainFrame.fnumber) MainFrame.text.setText(MainFrame.text.getText()+s);
      if(MainFrame.start) { MainFrame.text.setText("0");}
      MainFrame.computable=true;
    }
    else if((s=='+')&&(MainFrame.computable))//如果是“+”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="+";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
     else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));
       MainFrame.computable=true;
     }
    }
    else if((s=='-')&&(MainFrame.computable))//如果是“-”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="-";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
     else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));     
       MainFrame.computable=true;
     }
    }
    else if((s=='*')&&(MainFrame.computable))//如果是“*”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="*";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
     else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));
       MainFrame.computable=true;
     }     
    }
    else if((s=='/')&&(MainFrame.computable))//如果是“/”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="/";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
     if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                           MainFrame.computable=false;
                           MainFrame.error=false;
                         }
     else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
     else 
     { MainFrame.text.setText(" "+approximation(MainFrame.answear));
       MainFrame.computable=true;
     }
    }
    else if((s=='.')&&(MainFrame.computable)) //如果是小数点键
    { if(!MainFrame.point)
      { MainFrame.text.setText(MainFrame.text.getText()+s);
       	MainFrame.point=true;
       	MainFrame.fnumber=true;
       }
      MainFrame.start=false;
    }
    else if((s=='\n')&&(MainFrame.computable))//如果是“=”
    { comput(Double.parseDouble(MainFrame.text.getText()));
      MainFrame.ysf="=";
      MainFrame.start=true;
      MainFrame.point=false;
      MainFrame.fnumber=false;
      if(MainFrame.error) { MainFrame.text.setText("除数不能为0");
                            MainFrame.computable=false;
                            MainFrame.error=false;
                          }
      else if(MainFrame.error2) 
      { MainFrame.text.setText("数据过大,造成溢出");
        MainFrame.computable=false;
        MainFrame.error2=false;
      }
      else { MainFrame.text.setText(" "+approximation(MainFrame.answear));
             MainFrame.computable=true;
           }
    }
    else if((s=='\b')&&(MainFrame.computable))//如果是退格键
    { a=MainFrame.text.getText();
      if(a.length()>1)
      { a = MainFrame.text.getText().substring(0, MainFrame.text.getText().length()-1);
        MainFrame.text.setText(a);
      }
      else { MainFrame.text.setText("0");
             MainFrame.start=true;
             a="0";//防止a的长度为0而使退格键失效
           }
    }
  }
  
  public void keyReleased(KeyEvent e){}
  
  public void keyPressed(KeyEvent e){}
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -