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();
}
}
}
}
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();
}
}
}
}