首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机尝试在java中生成表达式eval函数。

本机尝试在java中生成表达式eval函数。
EN

Stack Overflow用户
提问于 2021-01-20 07:33:41
回答 1查看 37关注 0票数 0

我对自己提出了一个挑战,在Java上创建函数'eval()‘(来自python),而不需要导入任何额外的库。但当我面对"-20-10“时我被困住了。

当找到运算符时,我的代码基本上将字符串分成两部分(a和b)。

代码语言:javascript
复制
String equ = "-20-10" // The first "-" is found
String a = "";
String b = "20-10";

然后,字符串a和b进入递归循环。但在这种情况下,a将为“(空)”并输出错误。

代码语言:javascript
复制
String equ = "20-10";
String a = "20";
String b = "10";

这个错误与程序的逻辑有关,我似乎无法理解,需要指导。

代码语言:javascript
复制
private String calc(String equ) {
        String result = equ;
        if(equ.contains("+")) {
            System.out.println("+ found");
            String a = equ.substring(0, equ.indexOf('+'));
            System.out.println("+ a:"+a);
            String b = equ.substring(equ.indexOf('+')+1);
            System.out.println("+ b:"+b);
            a = calc(a);
            System.out.println(a+" + "+b);
            b = calc(b);
            result = String.valueOf(Double.valueOf(a)+Double.valueOf(b));
            System.out.println("+ result:"+result);
        }
        else if (equ.contains("-")) {
                System.out.println("- found:");
                String a = equ.substring(0, equ.indexOf('-'));
                System.out.println("- a:"+a);
                String b = equ.substring(equ.indexOf('-')+1);
                System.out.println("- b:"+b);
                a = calc(a);
                System.out.println(a+" - "+b);
                b = calc(b);
                result = String.valueOf(Double.valueOf(a)-Double.valueOf(b));
                System.out.println("- result:"+result);
        }
        else if (equ.contains("/")) {
            System.out.println("/ found:");
            String a = equ.substring(0, equ.indexOf('/'));
            System.out.println("/ a:"+a);
            String b = equ.substring(equ.indexOf('/')+1);
            System.out.println("/ b:"+b);
            a = calc(a);
            System.out.println(a+" / "+b);
            b = calc(b);
            result = String.valueOf(Double.valueOf(a)/Double.valueOf(b));
            System.out.println("/ result:"+result);
        }
        else if(equ.contains("*")) {
            System.out.println("* found:");
            String a = equ.substring(0, equ.indexOf('*'));
            System.out.println("* a:"+a);
            String b = equ.substring(equ.indexOf('*')+1);
            System.out.println("* b:"+b);
            a = calc(a);
            System.out.println(a+" * "+b);
            b = calc(b);
            result = String.valueOf(Double.valueOf(a)*Double.valueOf(b));
            System.out.println("* result:"+result);
        }
        return result;
    }
EN

回答 1

Stack Overflow用户

发布于 2021-01-20 08:24:47

浏览问题是,当您用calc()调用"-20"时,它将字符串分离到"""20",所以当tou调用Double.valueOf("")时,他抛出了一个NumberFormatException。要解决此问题,只需将正负if状态更改为:

代码语言:javascript
复制
if(equ.substring(1).contains("+")) {
            System.out.println("+ found");
            String a = equ.substring(0, equ.lastIndexOf('+'));
            System.out.println("+ a:"+a);
            String b = equ.substring(equ.lastIndexOf('+')+1);
            System.out.println("+ b:"+b);
            a = calc(a);
            System.out.println(a+" + "+b);
            b = calc(b);
            result = String.valueOf(Double.valueOf(a)+Double.valueOf(b));
            System.out.println("+ result:"+result);
        }
        else if (equ.substring(1).contains("-")) {
                System.out.println("- found:");
                String a = equ.substring(0, equ.lastIndexOf('-'));
                System.out.println("- a:"+a);
                String b = equ.substring(equ.lastIndexOf('-')+1);
                System.out.println("- b:"+b);
                a = calc(a);
                System.out.println(a+" - "+b);
                b = calc(b);
                result = String.valueOf(Double.valueOf(a)-Double.valueOf(b));
                System.out.println("- result:"+result);
        }

这使得函数将"-20"看作是"-20",而不是""减去"20"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65804959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档