回复 3楼 java小白兔
import
import
import java.util.ArrayList;
public class Main{
public static void main(String[] args)throws Exception{
//1读取输入的表达式
InputStreamReader irs = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(irs);
String express = br.readLine();
//2将表达式中的数值分割出来
String[] valueS = express.split("\\+|-|\\*|/");
ArrayList<Integer> valueArrayList = new ArrayList<Integer>();
ArrayList<Integer> valueArrayList1 = new ArrayList<Integer>();
for(String s: valueS){
int n = Integer.parseInt(s);
valueArrayList.add(n);
}
//3将表达式中的操作符分割出来
ArrayList<Character> opsArrayList = new ArrayList<Character>();
ArrayList<Character> opsArrayList1 = new ArrayList<Character>();
for(int i =0;i<express.length();i++){
char ops = express.charAt(i);
if(ops == '+' || ops == '-' || ops == '*' || ops == '/'){
opsArrayList.add(ops);
}
}
//4循环表达式,将表达式中所以的*或/的式子进行计算
int index = 0;
flag:while(index < opsArrayList.size()){//这个while的条件可以一直为true;
//5找到第一个*或/的位置startIndex。如果没有则跳出循环
char c = opsArrayList.get(index);
while( c != '*' && c != '/'){
index++;
if(index >= opsArrayList.size()){
break flag;//break flag 可以跳出两次层循环的。就是跳出flag的位置。表明该表达式中没有*或/。
}
c = opsArrayList.get(index);
}
int startIndex = index;
//6找到连续几个*或/的最后一个位置endIndex;
c = opsArrayList.get(startIndex);
while( c == '*' || c == '/'){
index++;
if(index >= opsArrayList.size()){
break;//跳出本while循环,表明找到最后一个操作符,进行7的子表达式计算
}
c = opsArrayList.get(index);
}
int endIndex = index-1;
//7对这个*或/的子表达式进行计算,得出结果sum
int sum = valueArrayList.get(startIndex);
for(int i = startIndex;i<= endIndex;i++){
char cops = opsArrayList.get(i);
if(cops == '*'){
sum *= valueArrayList.get(i+1);
}else if(cops == '/'){
sum = sum / valueArrayList.get(i+1);
}
}
//8删除刚计算的子表达式中的操作数以及操作符。并把结果sum放入第一个操作数的位置startIndex
for(int i = 1;i<= (endIndex-startIndex)+1;i++){
opsArrayList.remove(startIndex);
valueArrayList.remove(startIndex);
}
valueArrayList.remove(startIndex);
valueArrayList.add(startIndex,sum);
}
//9将得到的只包含+或-表达式进行计算
int result = valueArrayList.get(0);
for(int i=0;i<opsArrayList.size();i++){
char cops = opsArrayList.get(i);
if(cops == '+'){
result += valueArrayList.get(i+1);
}else if(cops == '-'){
result -= valueArrayList.get(i+1);
}
}
System.out.println(result);
}
}