题目来源:
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:1+2*10-10/2=输出样例:
10解法:
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
String OPE= "+-*/=";
//获得表达式
String expression = scanner.next();
//是否已有操作符
boolean haveOperator =false;
//暂存操作数
StringBuilder stroperand = new StringBuilder();
//操作数
int operand1=0 ;
int operand2=0 ;
//暂存上一个操作符
char operator=' ';
//遍历表达式
for(int i=0;i<expression.length();i++)
{
try{
char c = expression.charAt(i);
//如果是数字,加到stroperand后
if( OPE.indexOf(c)<0)
{
stroperand.append(c);
}
//如果是操作符
else
{
//将stroperand中的字符串转换成数字
int temp = Integer.valueOf(stroperand.toString());
//stroperand清空
stroperand.delete(0, stroperand.length());
//判断是否有操作符
if(!haveOperator)
{
//无,将数字存入到operand1中
operand1 = temp;
}
else
{ //有,将数字存入到operand2中
operand2 = temp;
//让operand1 = operand1 操作符 operand2
int index = OPE.indexOf(operator);
switch(index)
{
case 0:
operand1 = operand1 + operand2;
break;
case 1:
operand1 = operand1 - operand2;
break;
case 2:
operand1 = operand1 * operand2;
break;
case 3:
operand1 = operand1 / operand2;
break;
}
}
haveOperator =true;
operator =c;
//如果操作符号是否是 =
if(operator=='=')
{
System.out.println(operand1);
return ;
}
}
}
catch(Exception e)
{
System.out.println("ERROR");
}
}
}
}