我正在编写代码来获取用户输入的多项式的系数和指数。例如,我在控制台中输入“-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));
}
}
答案 0 :(得分:2)
此处您的输入字符串为-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();
因此,当您尝试使用+
作为分隔符将其拆分时,第一个值将生成为&#34;&#34;输入字符串导致异常。
只需在for循环中添加一个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));
}
}
答案 1 :(得分:0)
不要那样预处理。您可以为.split()
参数使用一些智能正则表达式:
{
Scanner userInput = new Scanner(System.in);
System.out.println("Enter a polynomial: ");
String polynomial = userInput.nextLine();
String[] arr = polynomial.split("\\+|(?=-)");
}
然后你必须删除生成的String[]
中的空字符串。别担心,你可以修改for循环,它更容易:
for (int i = ("".equals(arr[0]) ? 1 : 0); i < arr.length; i++)
这样,数组的第一个元素中的空字符串将被忽略,如果它在那里。