Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想修复在数学表达式求解java程序中解析为double的错误_Java_Regex - Fatal编程技术网

我想修复在数学表达式求解java程序中解析为double的错误

我想修复在数学表达式求解java程序中解析为double的错误,java,regex,Java,Regex,我是java的初学者。我没有用java进行复杂编码的能力。 我想做一个程序来解决以字符串形式给出的数学表达式,它必须只包含数字和四个基本算术运算符。 我已经用我所知道的一些基本知识编写了下面的代码。但当我运行代码时,它显示错误。它说我不能将对象解析为double等等 我试着根据博德马斯规则给四个基本运算符赋予优先级。 但如果用户将表达式括在括号内,我不知道如何给括号赋予优先级 下面的代码对于那些只需要几行就可以完成的专家来说可能很有趣,但我确实是一个初学者 以下是我编写的代码: (由于此代码很简

我是java的初学者。我没有用java进行复杂编码的能力。 我想做一个程序来解决以字符串形式给出的数学表达式,它必须只包含数字和四个基本算术运算符。 我已经用我所知道的一些基本知识编写了下面的代码。但当我运行代码时,它显示错误。它说我不能将对象解析为double等等

我试着根据博德马斯规则给四个基本运算符赋予优先级。 但如果用户将表达式括在括号内,我不知道如何给括号赋予优先级

下面的代码对于那些只需要几行就可以完成的专家来说可能很有趣,但我确实是一个初学者

以下是我编写的代码: (由于此代码很简单,任何人都可以理解,因此没有编写注释)

import java.util.*;
导入java.util.concurrent.TimeUnit;
类计算器
{
公共静态void main(字符串[]args)
抛出异常
{
int aaa=0;
而(aaa==0){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“\n要求解的输入表达式:”);
字符串表达式=sc.nextLine();
如果(!expression.isEmpty()){
int charlength=expression.length();
字符串charat0=”“+表达式.charAt(0);
字符串charatList=”“+表达式.charAt(charlength-1);
ArrayList forops=新的ArrayList();
ArrayList forchars=新的ArrayList();
if(表达式.contains(“”)){
pWD(“\n不允许空间”,时间单位为毫秒,30);
}如果(!expression.matches([-+/*0-9]+”)匹配,则为else{
pWD(“\n仅输入数字和运算符”,时间单位为毫秒,30);
}如果(!charat0.matches(“[0-9]+”)| |!charatList.matches([0-9]+”){
pWD(“第一个和最后一个字符必须是\n数字”,时间单位为毫秒,30);
}else if(expression.contains(“/”)| | expression.contains(“**”)| | expression.contains(“--”)| | expression.contains(“+”)||
表达式。包含(“/+”)|表达式。包含(“*/”)|表达式。包含(“-*”)|表达式。包含(“+-”)||
表达式。包含(“/”)|表达式。包含(“*+”)|表达式。包含(“-/”)|表达式。包含(“+*”)||
表达式。包含(“/*”)|表达式。包含(“*-”)|表达式。包含(“-+”)|表达式。包含(“+/”){
pWD(“两个相邻数字之间必须有一个\n运算符”,时间单位为毫秒,30);
}否则{

String[]chararr=expression.split((?由于您声明的是一个
double
变量,因此无法为其赋值。因此我认为您最好的选择是:

将您的
int
转换为
double

您应该考虑的只是类型不匹配


错误发生在哪一行?更好的是,你能用更少的代码做一个例子,隔离出错误发生的点吗?你应该打印出你的
拆分操作的结果。可能其中一个子字符串无法转换为数字。你可能想参考link来了解更多关于转换的信息。是的,它起了作用。但是w当我在命令提示符下运行此命令时,它显示如下:注意:Calculator.java使用未经检查或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。我不知道该怎么做。帮助我…我可以看到,您使用的是ArrayList,但没有指定类型。如果您想摆脱它,请尝试根据您的代码在
Eclipse
IDE中工作!
import java.util.*;
import java.util.concurrent.TimeUnit;
class Calculator
{
public static void main(String[] args)
throws Exception
{
    int aaa =0;
    while(aaa==0){
        Scanner sc = new Scanner(System.in);
        System.out.println("\nEnter expression to solve : ");
        String expression = sc.nextLine();
        if(!expression.isEmpty()){
            int charlength = expression.length();
            String charat0 = ""+expression.charAt(0);
            String charatlast = ""+expression.charAt(charlength-1);
            ArrayList forops = new ArrayList();
            ArrayList forchars = new ArrayList();
            if(expression.contains(" ")){
                pWD("\nSpaces are not allowed",TimeUnit.MILLISECONDS,30);
            }else if(!expression.matches("[-+/*0-9]+")){
                pWD("\nEnter only numbers and operators",TimeUnit.MILLISECONDS,30);
            }else if(!charat0.matches("[0-9]+")||!charatlast.matches("[0-9]+")){
                pWD("first and last characters must be\nnumbers",TimeUnit.MILLISECONDS,30);
            }else if(expression.contains("//")||expression.contains("**")||expression.contains("--")||expression.contains("++")||
                     expression.contains("/+")||expression.contains("*/")||expression.contains("-*")||expression.contains("+-")||
                     expression.contains("/-")||expression.contains("*+")||expression.contains("-/")||expression.contains("+*")||
                     expression.contains("/*")||expression.contains("*-")||expression.contains("-+")||expression.contains("+/")){
                pWD("There must be SINGLE operator between\ntwo adjacent numbers",TimeUnit.MILLISECONDS,30);
            }else{
                String[] chararr = expression.split("(?<=[-+*/])|(?=[-+*/])");
                int chararrl =chararr.length;
                for(int nn=0;nn<chararrl;nn++){
                    forchars.add(chararr[nn]);
                }for(int mn=0;mn<chararrl;mn+=2){
                    String willparse = ""+forchars.get(mn);
                    double parseint= Double.parseDouble(willparse);
                    forchars.set(mn,parseint);
                }while(forchars.contains("/")){
                    int divindex = forchars.indexOf("/");
                    double prediv = forchars.get(divindex-1);
                    double nexdiv = forchars.get(divindex+1);
                    forchars.set(divindex,(prediv/nexdiv));
                    forchars.remove(forchars.indexOf(prediv));
                    forchars.remove(forchars.indexOf(nexdiv));
                }while(forchars.contains("*")){
                    int mulindex = forchars.indexOf("*");
                    double premul = forchars.get(mulindex-1);
                    double nexmul = forchars.get(mulindex+1);
                    forchars.set(mulindex,(premul*nexmul));
                    forchars.remove(forchars.indexOf(premul));
                    forchars.remove(forchars.indexOf(nexmul));
                }while(forchars.contains("-")){
                    int subindex = forchars.indexOf("-");
                    double presub = forchars.get(subindex-1);
                    double nexsub = forchars.get(subindex+1);
                    forchars.set(subindex,(presub-nexsub));
                    forchars.remove(forchars.indexOf(presub));
                    forchars.remove(forchars.indexOf(nexsub));
                }while(forchars.contains("+")){
                    int addindex = forchars.indexOf("+");
                    double preadd = forchars.get(addindex-1);
                    double nexadd = forchars.get(addindex+1);
                    forchars.set(addindex,(preadd+nexadd));
                    forchars.remove(forchars.indexOf(preadd));
                    forchars.remove(forchars.indexOf(nexadd));}
                double answer1 = forchars.get(0);
                String answer = Double.toString(answer1);
                pWD("\nFinal answer is : "+answer,TimeUnit.MILLISECONDS,80);
            }}else{
            pWD("Please enter something",TimeUnit.MILLISECONDS,30);
        }}
}public static void pWD(String data, TimeUnit unit, long delay)
throws InterruptedException {
    for (char ch:data.toCharArray()) {
        System.out.print(ch);
        unit.sleep(delay);
        }
    }
}
double prediv = (double) forchars.get(divindex - 1);