首页编程java编程java加减乘除有什么异常(加减乘除运算(Java))

java加减乘除有什么异常(加减乘除运算(Java))

编程之家2023-10-1296次浏览

老铁们,大家好,相信还有很多朋友对于java加减乘除有什么异常和加减乘除运算(Java)的相关问题不太懂,没关系,今天就由我来为大家分享分享java加减乘除有什么异常以及加减乘除运算(Java)的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

java加减乘除有什么异常(加减乘除运算(Java))

java加减乘除是什么类

java中实现加减乘除的类是java.math.BigDecimal类. BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。

加法运算:调用BigDecimal类的add方法即可

BigDecimalb1=newBigDecimal("1");

java加减乘除有什么异常(加减乘除运算(Java))

BigDecimalb2=newBigDecimal("2");

BigDecimalresult=b1.add(b2);//加法

System.out.println(result);

减法运算:调用BigDecimal类的subtract方法即可

java加减乘除有什么异常(加减乘除运算(Java))

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)的问题解决了您的问题,那么我们由衷的感到高兴!

java记事本是什么类型?电脑上的记事本是什么格式的佤帮(佤邦属于缅甸哪里)