java 四则运算

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Arithmetic {
private static Stack OPER; //运算符栈
private static Stack NUM; //运算数栈
private static ArrayList<String> arraylist; //存储数据的容器
String []stri=new String[100];
private final static char operatortable[][]= { //存储各种运算符的优先级
// + - * / ( ) # < 栈顶元素优先权低,压栈; > 退栈并将运算结果入栈
{'>','>','<','<','<','>','<'},
{'>','>','<','<','<','>','<'},
{'>','>','>','>','<','>','<'},
{'>','>','>','>','<','>','<'},
{'<','<','<','<','<','=','<'},
{'>','>','>','>','F','>','<'},
{'<','<','<','<','<','<','<'}
};


Arithmetic(){
arraylist =new ArrayList<String>();
OPER=new Stack();
NUM=new Stack();
}
//判断一个字符是否运算符
public boolean isOperator(String ch){
if(ch.equals("+")||ch.equals("-")||ch.equals("*")||ch.equals("/")||ch.equals("(")||ch.equals(")")){
return true;
}
else
return false;
}

public boolean isOperator2(String ch){
if(ch.equals("0")||ch.equals("1")||ch.equals("2")||ch.equals("3")||ch.equals("4")
||ch.equals("5")||ch.equals("6")||ch.equals("7")||ch.equals("8")||ch.equals("9")||ch.equals(".")){
return true;
}
else
return false;
}

//判断优先级
public char judge(String first, String second){
String [] index={"+","-","*","/","(",")","#"};//用于查找数组序列的一维数组
int firstIndex=0;
int secondIndex=0;
//寻找连个运算符的下标
for(int i=0;i<index.length;i++){
if(index[i].equals(first)){
firstIndex=i;
}
if(index[i].equals(second)){
secondIndex=i;
}
}
return operatortable[firstIndex][secondIndex];
}
//把字符串输入到arraylist中
public ArrayList getExpression(String string){
char[] strArray=new char[string.length()];
string.getChars(0, string.length(), strArray, 0);
String result="";
for(int i=0;i<strArray.length;i++){
String s=strArray[i]+"";

boolean a=isOperator(s); //运算符
boolean b=isOperator2(s); //数字
if(a){
if(!result.equals("")){
arraylist.add(result);
}
result="";
arraylist.add(s);
}
else if(b){
result=result+s;
}
}
arraylist.add(result);
return arraylist;
}
//判断运算符,进行运算
public float arit(float FirstNum,float SecondNum,String arit){
float sum=0;
if(arit.equals("+")){
sum=FirstNum+SecondNum;
}else if(arit.equals("-")){
sum=SecondNum-FirstNum;
}else if(arit.equals("*")){
sum=SecondNum*FirstNum;
}else if(arit.equals("/")){
sum=SecondNum/FirstNum;
}
return sum;
}
//判断优先级,进栈或者运算
public float opera(String opera){
arraylist=getExpression(opera);
OPER.push('#');
int i=0;
float a,b;
String c;
while(i<arraylist.size()){
String s=arraylist.get(i);
if(arraylist.get(i)==""){i++;}
else if(isOperator(s)){
switch(judge(OPER.peek().toString(),s)){
case '<':
OPER.push(s);
i++;break;
case '>':
c=OPER.pop().toString();
a=Float.parseFloat(NUM.pop().toString());
b=Float.parseFloat(NUM.pop().toString());
NUM.push(arit(a,b,c));
break;
case '=':
OPER.pop();
i++;
break;
}
}
else {
NUM.push(s);
i++;
}
}
while(!(OPER.peek().toString()).equals("#")){
c=OPER.pop().toString();
a=Float.parseFloat(NUM.pop().toString());
b=Float.parseFloat(NUM.pop().toString());

NUM.push(arit(a,b,c));
}
return Float.parseFloat(NUM.peek().toString());
}
public static void main(String args[]){
String str="";
String st="";
boolean flag=true;
while(flag){
try{
System.out.println("输入:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str=br.readLine();
Arithmetic ari=new Arithmetic();
float a=ari.opera(str);
System.out.println("答案是:"+a);
System.out.println("继续操作吗?(Y/N):");
st=br.readLine();
if(st.equals("Y") || st.equals("y")){
flag=true;
}else flag=false;

}
catch(Exception e){
System.out.println(e);
e.printStackTrace();
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值