主解析字符串中的NullPointerException要加倍

问题描述 投票:0回答:1

我正在尝试将String解析为带有Double.parseDouble();的双精度型,但是出现以下错误:

Exception in thread "main"  35.5
java.lang.NullPointerException
    at Caluclator/userInput.Calculation.addMinus(Calculation.java:57)
    at Caluclator/userInput.Calculation.parse(Calculation.java:28)
    at Caluclator/userInput.Input.main(Input.java:12)

我找不到我要去哪里。

package userInput;

public class Calculation {
    public Double answer;

    public  Calculation() {
        }

    //Splitting string for 
    public static Double parse(String input) {
        String[] operator = new String[20];
        String[] delimiter = input.split("\\+|-");
        Integer counter = 0;

        //this searches to see if there is an operator
        for(Integer i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if(c == '+'||c == '-'){
                operator[counter] = Character.toString(c);
                counter++;
            }

        }
        delimiter = multDiv(delimiter);
        for(String element: delimiter) {
            System.out.println(element);
        }
        return addMinus(delimiter,operator,counter);//ERROR
    }


    //Multiplies the numbers
    public static String[] multDiv (String[] delimiter) {
        for(Integer y = 0; y < delimiter.length ; y++) {//iterates through elements in delimiter

            for(Integer i = 0; i < delimiter[y].length(); i++) {//iterates through chars in element string
                if(delimiter[y].charAt(i) == '*') {
                    String[] nums = delimiter[y].split("\\*");
                    delimiter[y]= String.valueOf(Double.parseDouble(nums[0])*Double.parseDouble(nums[1]));
                }
                else if(delimiter[y].charAt(i) == '/') {
                    String[] nums = delimiter[y].split("/");
                    delimiter[y] =String.valueOf(Double.parseDouble(nums[0])/Double.parseDouble(nums[1]));
                }

            }
        }
    return delimiter;
    }

/////*****SEARCHES FOR ADDS OR SUBTRACTS THE NUMBERS *****////
    public static Double addMinus(String[] numbers, String[] symbols, Integer counter) {
        double answ = Double.parseDouble(numbers[0]);
            Integer x = 1;

            for(Integer i = 0; i < symbols.length; i++) {
                if(symbols[i].contentEquals("-")) {//ERROR
                    double num = Double.parseDouble(numbers[x]);
                    answ = answ - num;
                    System.out.println(" "+answ);
                }
                else if(symbols[i].contentEquals("+")) {
                    double num = Double.parseDouble(numbers[x]);
                    answ = answ + num ;
                    System.out.println(" "+answ);
                }
                x++;
            }
            System.out.println(answ);
    return answ;
    }

java parsing nullpointerexception double
1个回答
0
投票

不是operator中的所有点都被填充。这是因为您假设输入中至少包含20个+或-字符,但是如果不包含,则访问的是空值String。我可以想到两个修复程序:

选项1:

        for(Integer i = 0; i < symbols.length; i++) {
            if(symbols[i] != null && symbols[i].contentEquals("-")) {//ERROR
                double num = Double.parseDouble(numbers[x]);
                answ = answ - num;
                System.out.println(" "+answ);
            }
            else if(symboles[i] != null && symbols[i].contentEquals("+")) {
                double num = Double.parseDouble(numbers[x]);
                answ = answ + num ;
                System.out.println(" "+answ);
            }
            x++;
        }

每次迭代,请先检查它是否不为null,然后继续。

选项2:

        for(Integer i = 0; i < symbols.length && symbols[i] != null; i++) {
            if(symbols[i].contentEquals("-")) {//ERROR
                double num = Double.parseDouble(numbers[x]);
                answ = answ - num;
                System.out.println(" "+answ);
            }
            else if(symbols[i].contentEquals("+")) {
                double num = Double.parseDouble(numbers[x]);
                answ = answ + num ;
                System.out.println(" "+answ);
            }
            x++;
        }

由于从头开始填充operations,一旦到达null String,停止,就完成了。

注意: operator不必是String[],它可以只是char[],因为您要放置-+符号,不需要String大于尺寸1。

© www.soinside.com 2019 - 2024. All rights reserved.