蓝桥杯【day6】定义包含递归的问题

1.逆波兰表达式

package 第五天递归;

import java.util.Scanner;

public class 逆波兰 {
    //static int [] a=new int[20];
    static Scanner scanner=new Scanner(System.in);
    static double bolan(){

        String s=scanner.next();
        switch (s.charAt(0)){
            case '+':return bolan()+bolan();
            case '-':return bolan()-bolan();
            case '*':return bolan()*bolan();
            case '/':return bolan()/bolan();
            default:return Double.parseDouble(s);

        }

    }

    public static void main(String[] args) {
        System.out.printf("%f\n",bolan());
    }

}

注意事项:

1.String和char的区别

字符串和字符

2.next和nextLine的区别

一个忽略空行,一个不忽略

3.String,charAt(int i)寻找指定为的字符

4.double类型的输出(%f)

5.将字符串转换成double类型的数字Double.parsedouble

算法思想:

看代码

2.表达式求值

 

解题代码:

package 第五天递归;


import java.util.Scanner;

public class 表达式求职 {
    static Scanner scanner=new Scanner(System.in);
    static char[] num;
    static int i=0;
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        num=scanner.nextLine().toCharArray();//读入一行表达式将它转换成一个char数组
        System.out.println(expression_value());
    }
    static int factor_value(){//求一个因子的值
        int result=0;
        char s=num[i];
        if(s=='('){
            i++;
            result=expression_value();
            if(i<num.length-1)
            i++;
        }else{
            while (Character.isDigit(s)&i<num.length){
                result=10*result+s-'0';//高位数的记录
                if(i<num.length-1) {//当输入的表达式结尾是数字
                    i++;
                    s=num[i];
                }
                else break;
            }

        }
        return result;


}
static int term_value(){//求一个项的值

    int result =factor_value();//读入一个项
    boolean more=true;
    while (more){
        char s=num[i];
        if(s=='*'||s=='/'){
            i++;
            int value=factor_value();
            if(s=='*')
                result*=value;
            else
                result /=value;
        }
        else more=false;
    }
    return result;
}
static int expression_value(){//求一个表达式的值

    int result =term_value();//读入一个项
    boolean more=true;
    while (more){
       char s=num[i];
       if(s=='+'||s=='-'){
           i++;
           int value=term_value();
           if(s=='+')
               result+=value;
           else
               result -=value;
       }
       else more=false;
    }
    return result;
}
}
//注意数组越界的问题!!!

注意事项:scanner.nextLine().toCharArray();//读入一行表达式将它转换成一个char数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值