我正在编写代码以获取用户输入的多项式的系数和指数。例如,我要在控制台中输入“ -3x ^ 4 + 2x ^ 3 + 1x ^ 2-1x ^ 1 + 8x ^ 0”。我不断收到此错误:
Exception in thread "main"
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at polynomials.Driver.main(Driver.java:31)
但是,当我输入不带任何负数的多项式(例如:“ 3x ^ 4 + 2x ^ 3 + 1x ^ 2 + 1x ^ 1 + 8x ^ 0”)时,没有错误。我认为该错误某种程度上来自Integer.parseInt(str2),但它不应该能够解析一个负整数吗?这对我来说毫无意义,我在其他任何地方都找不到。任何帮助都将是很大的帮助。感谢大家!
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
System.out.println("Enter a polynomial: ");
String polynomial = userInput.nextLine();
String newPoly = polynomial.replace("-", "+-").trim();
String[] arr = newPoly.split("\\+");
for (int i = 0; i<arr.length; i++) {
System.out.println(arr[i]);
String str = arr[i].trim();
String[] arr2 = str.split("x");
String str2 = arr2[0];
System.out.println(str2); //prints coefficient
System.out.println(str.substring(str.indexOf('^')+1)); //prints exponent
System.out.println(Integer.parseInt(str2));
}
}
最佳答案
在这里,您输入的字符串是-3x^4+2x^3+1x^2-1x^1+8x^0
,它将在下一行之后转换为+-3x^4+2x^3+1x^2-1x^1+8x^0
。
String newPoly = polynomial.replace("-", "+-").trim();
因此,当您尝试使用
+
作为分隔符对其进行拆分时,First值将作为“”输入字符串生成,从而导致异常。只要在条件循环中添加一个if条件,就可以了
for (int i = 0; i<arr.length; i++) {
if(arr[i].length()>0){
System.out.println(arr[i]);
String str = arr[i].trim();
String[] arr2 = str.split("x");
String str2 = arr2[0];
System.out.println(str2); //prints coefficient
System.out.println(str.substring(str.indexOf('^')+1)); //prints exponent
System.out.println(Integer.parseInt(str2));
}
}