我正在尝试将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;
}
不是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。