📄 l1.java
字号:
import java.io.*;
public class l1 {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
do{
System.out.println("请输入四则运算表达式或输入exit");
/*判断是否退出*/
String s=in.readLine();
s=s.trim();
if(s.equals("")){
continue;
}
else{
if(s.equals("exit")){
break;
}
}
/*保存到数组中*/
char s1[]=s.toCharArray();
float ss[]=new float[s.length()];
for(int i=0;i<s.length();i++){
ss[i]=(float)s1[i];
}
/*检查表达式是否正确*/
boolean flag=false; //用来判断是否有错误,false为没有错误,true为有错误
float x[]=new float[100];
int op[]=new int[100];
int j=0;
if(ss[0]<48||ss[0]>57){
flag=true;
System.out.println("第一个字符不是数字,表达式不正确");
}
else{
int i=0;
boolean dot=false; //用来判断是否有小数点,有为true,没有为false
float n=0.1f;
while(i<s.length()){
if(!dot&&ss[i]>=48&&ss[i]<=57){
x[j]=10*x[j]+(ss[i]-48);
}
else{
if(ss[i]==46){
dot=true;
if(i==s.length()-1){
flag=true;
System.out.println("不能以小数点结尾");
}
else{
if(ss[i+1]<48||ss[i+1]>57){
flag=true;
System.out.println("小数点后没有数");
}
}
}
else{
if(dot&&ss[i]>=48&&ss[i]<=57){
x[j]=x[j]+n*(ss[i]-48);
n=n*0.1f;
}
else{
if(ss[i]==43||ss[i]==45||ss[i]==42||ss[i]==47){
if(i==s.length()-1){
op[j]=(int)ss[i];
flag=true;
System.out.println("不能以运算符结尾!");
}
else{
if(ss[i+1]==43||ss[i+1]==45||ss[i+1]==42||ss[i+1]==47){
flag=true;
System.out.println("运算符重复");
}
else{
dot=false;
n=0.1f; //一个浮点型数结束,小数点赋初值
op[j]=(int)ss[i];
j++;
}
}
}
else{
flag=true;
System.out.println((char)ss[i]+"不是四则表达式运算符");
}
}
}
}
i++;
}
if(op[0]==0){
flag=true;
System.out.println("没有运算符");
}
}
/*计算,分三种情况:当前判断的运算符为+或-,下一个也为+或-;当前判断的运算符为+或-,下一个为*或/;当前判断的运算符为*或/*/
float z=x[0]; //结果保存为浮点型
if(!flag){
int g=0;
while(g!=j){
/*如果当前运算符为+或-,下一个也为+或-或没有其它运算符,顺次计算。*/
if((op[g]==43||op[g]==45)&&(op[g+1]==43||op[g+1]==45||op[g+1]==0)){
if(op[g]==43){
z=z+x[g+1];
}
if(op[g]==45){
z=z-x[g+1];
}
g++;
}
/*如果当前运算符为+或-,下一个为*或/,则先算*或/。*/
if((op[g]==43||op[g]==45)&&(op[g+1]==42||op[g+1]==47)){
int h=g+1;
float temp=x[h];
while(op[h]==42||op[h]==47){ //如果还是*或/,继续计算*或/,保存到temp,直到不是为至
if(op[h]==42){
temp=temp*x[h+1];
}
if(op[h]==47){
temp=temp/x[h+1];
}
h++;
}
/* *或/的结果和之前的数做*或-运算 */
if(op[g]==43){
z=z+temp;
}
if(op[g]==45){
z=z-temp;
}
g=h;
}
/*如果当前运算为*或/,计算*/
if(op[g]==42||op[g]==47){
if(op[g]==42){
z=z*x[g+1];
}
if(op[g]==47){
z=z/x[g+1];
}
g++;
}
}
System.out.println("你输入的表达式的值为"+z);
}
}while(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -