我正在编写代码以获取用户输入的多项式的系数和指数。例如,我要在控制台中输入“ -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));
    }
}

07-26 05:18