你的程序要读入一个整数四则运算的式子,其中的整数均为非负整数且小于10000,其中
的运算符只有加减乘除(+-*/)四种。你的程序要计算这个式子,并输出结果。计算过程
必须遵守优先级,即*/要在+-之前先计算。当遇到除法时,按照Java 语言的整数除法的
方式来计算,即只留下整数的结果。
提示:一种可能的做法是,将整个式子作为字符串读入,然后找出其中最后一个+或-,在
此位置将其截成两段,分别计算后再做+或-,以此类推。
另,用Integer.parseInt(s)可以从一个字符串得到整数。
输入格式:
输入时,所有的成分均没有有空格隔开,即每个运算符前后都没有空格。注意,单个数字也
是可能的一种输入。
输出格式:
输出结果的整数。
输入样例:
2+3*4-6/3
输出样例:
的运算符只有加减乘除(+-*/)四种。你的程序要计算这个式子,并输出结果。计算过程
必须遵守优先级,即*/要在+-之前先计算。当遇到除法时,按照Java 语言的整数除法的
方式来计算,即只留下整数的结果。
提示:一种可能的做法是,将整个式子作为字符串读入,然后找出其中最后一个+或-,在
此位置将其截成两段,分别计算后再做+或-,以此类推。
另,用Integer.parseInt(s)可以从一个字符串得到整数。
输入格式:
输入时,所有的成分均没有有空格隔开,即每个运算符前后都没有空格。注意,单个数字也
是可能的一种输入。
输出格式:
输出结果的整数。
输入样例:
2+3*4-6/3
输出样例:
12
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String s = in.nextLine();
int sum;
// 切割字符串为字符串数组
String[] s1=s.split("\\+|-");
// 输出切割后的字符串数组
for(String b:s1)
{
System.out.println(b);
}
int[] digt = new int[s1.length];
// 转换每个字符串数组,并求出的结果
for(int i=0;i<s1.length;i++)
{
String[] s2 =s1[i].split("\\*|/");
// 输出切割后的字符串数组
for(String b:s2)
{
System.out.println(b);
}
int[] s3 = new int[s2.length];
// 把字符串转换int数据
for(int j=0;j<s2.length;j++)
{
s3[j]=Integer.parseInt(s2[j]);
}
int aa=0;
int bb=0;
int cnt=0;
aa=s1[i].indexOf('*');
bb=s1[i].indexOf('/');
digt[i]=s3[0];
for(int k=1;cnt<s2.length-1;k++)
{
if(aa==-1)
{
digt[i]/=s3[k];
cnt++;
}
else if(bb==-1)
{
digt[i]*=s3[k];
cnt++;
}
else
{
if(aa>bb)
{
digt[i]/=s3[k];
bb=s1[i].indexOf('/',bb+1);
cnt++;
}
else
{
digt[i]*=s3[k];
aa=s1[i].indexOf('*',aa+1);
cnt++;
}
}
}
}
// 输出得到每个子字符串的结果
for(int b:digt)
{
System.out.println(b);
}
int aa=0;
int bb=0;
int cnt=0;
aa=s.indexOf('+');
bb=s.indexOf('-');
sum=digt[0];
// 得出总结果
for(int k=1;cnt<digt.length-1;k++)
{
if(aa==-1)
{
sum-=digt[k];
cnt++;
}
else if(bb==-1)
{
sum+=digt[k];
cnt++;
}
else
{
if(aa>bb)
{
sum-=digt[k];
bb=s.indexOf('-',bb+1);
cnt++;
}
else
{
sum+=digt[k];
aa=s.indexOf('+',aa+1);
cnt++;
}
}
}
System.out.println(sum);
in.close();
}