java加减乘除有什么异常(加减乘除运算(Java))
老铁们,大家好,相信还有很多朋友对于java加减乘除有什么异常和加减乘除运算(Java)的相关问题不太懂,没关系,今天就由我来为大家分享分享java加减乘除有什么异常以及加减乘除运算(Java)的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
java加减乘除是什么类
java中实现加减乘除的类是java.math.BigDecimal类. BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
加法运算:调用BigDecimal类的add方法即可
BigDecimalb1=newBigDecimal("1");
BigDecimalb2=newBigDecimal("2");
BigDecimalresult=b1.add(b2);//加法
System.out.println(result);
减法运算:调用BigDecimal类的subtract方法即可
BigDecimalb1=newBigDecimal(3.2);
BigDecimalb2=newBigDecimal(1.6);
BigDecimalresult=b1.subtract(b2);//减法
System.out.println(result);
乘法运算:调用BigDecimal类的multiply方法即可
BigDecimalb1=newBigDecimal(9);
BigDecimalb2=newBigDecimal(8.2);
BigDecimalresult=b1.multiply(b2);//乘法
System.out.println(result);
除法运算:调用BigDecimal类的divide方法即可。
注意:除法运算存在除不尽的情况,比如1.0/3=0.333333..我们需要指定小数点后面的长度,以及有效的舍入模式(例如四舍五入模式).
BigDecimalb1=newBigDecimal("1");
BigDecimalb2=newBigDecimal("3");
intscale=5;//scale指定小数点后面的位数为5位
doubleresult=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//除法
//BigDecimal.ROUND_HALF_UP表示四舍五入
System.out.println(result);
备注:
1:BigDecimal的构造参数有很多,但浮点类型建议转换成字符串类型,避免精度的丢失.
doubled1=0.001;//浮点类型
Strings1=Double.toString(d1);//转成字符串
BigDecimalb1=newBigDecimal(s1);//使用字符串作为构造参数
2:BigDecimal类,内存占用比基本类型多,并且为了计算的精度,速度比double慢一点.所以,只有在需要精确计算的情况下,才使用BigDecimal类进行.普通运算,还是多使用+-*/运算符,位运算符等.
java的程序的问题。不能实现加减乘除!
你提供的程序明显不全!
根据你提供的程序中,明显加减乘除四个按钮都是调用同一个方法button2_actionPerformed(ActionEvent e),所以问题当然就出在这方法里面。
我这里写了一下button2_actionPerformed(ActionEvent e)方法,你可以根据自己需要修改,当然我还是建议不同运算分别写不同的方法:
public void button2_actionPerformed(ActionEvent e){
//先获取按钮标识,用以识别到底按了那个按钮
String method= e.getActionCommand();
//获取前两个文本框的字符串
String t1= text1.getText();
String t2= text2.getText();
try{
//为了运算必须吧之前获取的字符串转为数字类型,并加入异常获取
double d1= Double.valueOf(t1);
double d2= Double.valueOf(t2);
double d3= 0.0;
if("+".equals(method)){
d3= d1+ d2;
} else if("-".equals(method)){
d3= d1- d2;
} else if("*".equals(method)){
d3= d1* d2;
} else if("/".equals(method)){
d3= d1/ d2;
}
//把运算结果转回字符串输出到第三个文本中
text3.setText(String.valueOf(d3));
} catch(Exception ex){
//字符串转数字异常则提示异常信息
text3.setText("输入异常");
}
}
加减乘除运算(Java)
实际上这相当于javascript的eval方法,以下是该方法的java实现:
//Eval.java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Eval{
public int eval(String exp){
List<String> list= infixExpToPostExp(exp);//转化成后缀表达式
return doEval(list);//真正求值
}
//遇到操作符压栈,遇到表达式从后缀表达式中弹出两个数,计算出结果,压入堆栈
private int doEval(List<String> list){
Stack<String> stack= new Stack<String>();
String element;
int n1,n2,result;
try{
for(int i= 0; i< list.size();i++){
element= list.get(i);
if(isOperator(element)){
n1= Integer.parseInt(stack.pop());
n2= Integer.parseInt(stack.pop());
result= doOperate(n1,n2,element);
stack.push(new Integer(result).toString());
}else{
stack.push(element);
}
}
return Integer.parseInt(stack.pop());
}catch(RuntimeException e){
throw new IllegalExpressionException(e.getMessage());
}
}
private int doOperate(int n1, int n2, String operator){
if(operator.equals("+"))
return n1+ n2;
else if(operator.equals("-"))
return n1- n2;
else if(operator.equals("*"))
return n1* n2;
else
return n1/ n2;
}
private boolean isOperator(String str){
return str.equals("+")|| str.equals("-")|| str.equals("*")|| str.equals("/");
}
private List<String> infixExpToPostExp(String exp){//将中缀表达式转化成为后缀表达式
List<String> postExp= new ArrayList<String>();//存放转化的后缀表达式的链表
StringBuffer numBuffer= new StringBuffer();//用来保存一个数的
Stack<Character> opStack= new Stack<Character>();//操作符栈
char ch,preChar;
opStack.push('#');
try{
for(int i= 0; i< exp.length();){
ch= exp.charAt(i);
switch(ch){
case'+':
case'-':
case'*':
case'/':
preChar= opStack.peek();
//如果栈里面的操作符优先级比当前的大,则把栈中优先级大的都添加到后缀表达式列表中
while(priority(preChar)>= priority(ch)){
postExp.add(""+preChar);
opStack.pop();
preChar= opStack.peek();
}
opStack.push(ch);
i++;
break;
case'(':
//左括号直接压栈
opStack.push(ch);
i++;
break;
case')':
//右括号则直接把栈中左括号前面的弹出,并加入后缀表达式链表中
char c= opStack.pop();
while(c!='('){
postExp.add(""+ c);
c= opStack.pop();
}
i++;
break;
//#号,代表表达式结束,可以直接把操作符栈中剩余的操作符全部弹出,并加入后缀表达式链表中
case'#':
char c1;
while(!opStack.isEmpty()){
c1= opStack.pop();
if(c1!='#')
postExp.add(""+ c1);
}
i++;
break;
//过滤空白符
case'':
case'\t':
i++;
break;
//数字则凑成一个整数,加入后缀表达式链表中
default:
if(Character.isDigit(ch)){
while(Character.isDigit(ch)){
numBuffer.append(ch);
ch= exp.charAt(++i);
}
postExp.add(numBuffer.toString());
numBuffer= new StringBuffer();
}else{
throw new IllegalExpressionException("illegal operator");
}
}
}
}catch(RuntimeException e){
throw new IllegalExpressionException(e.getMessage());
}
return postExp;
}
private int priority(char op){//定义优先级
switch(op){
case'+':
case'-':
return 1;
case'*':
case'/':
return 2;
case'(':
case'#':
return 0;
}
throw new IllegalExpressionException("Illegal operator");
}
}
Main.java主函数所在类
public class Main
{
public static void main(String[] args){
try{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String exp=br.readLine();
int result= eval.eval(exp);
System.out.println(result);
}
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
IllegalExpressionException异常类
public class IllegalExpressionException extends RuntimeException{
public IllegalExpressionException(){
}
public IllegalExpressionException(String info){
super(info);
}
}
文章到此结束,如果本次分享的java加减乘除有什么异常和加减乘除运算(Java)的问题解决了您的问题,那么我们由衷的感到高兴!