我写了这个程序:
public class FunctionEvaluator {
public static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int degree;
System.out.print("What degree would you like your polynomial to be? ");
degree = console.nextInt();
int a[] = new int[degree + 1];
int coefficient;
for (int i = 0; i <= degree; i++) {
System.out.print("Coefficient of the x^" + (degree - i) + " term: ");
coefficient = console.nextInt();
a[i] = coefficient;
}
System.out.print("f(x) = ");
for (int i = 0; i < degree + 1; i++) {
System.out.print(a[i] + "x^" + (degree - i));
if (a[i] == degree) {
System.out.println(" ");
} else if (a[i + 1] >= 0 && a[i + 1] < degree) {
System.out.print(" + ");
} else if (a[i] < 0) {
System.out.print(" - ");
} else {
System.out.print(" ");
}
}
System.out.println();
int x;
int yN = 0;
double fOfX = 0;
double sum1;
do {
System.out.print("Give a value for x: ");
x = console.nextInt();
int deg = degree;
for (int i = 0; i <= degree; i++) {
sum1 = a[i] * Math.pow(x, deg);
deg--;
fOfX = fOfX + sum1;
}
System.out.println("f(" + x + ") = " + fOfX);
System.out.print("Do you want to go again (1 for yes and 0 for no)? ");
yN = console.nextInt();
} while (yN == 1);
System.out.println("Done.");
}
此代码存在问题:
System.out.print("f(x) = ");
for (int i = 0; i < degree + 1; i++) {
System.out.print(a[i] + "x^" + (degree - i));
if (a[i] == degree) {
System.out.println(" ");
} else if (a[i + 1] >= 0 && a[i + 1] < degree) {
System.out.print(" + ");
} else if (a[i] < 0) {
System.out.print(" - ");
} else {
System.out.print(" ");
}
}
主代码应该询问用户一定程度的多项式和系数,然后做一些数学运算。如果我注释掉上面的代码段,程序运行正常。但是,当我将上面的代码留在(它应该打印出函数)时,程序崩溃了。我怀疑它与for循环的限制有关,但无论我改变或修改什么,程序仍然会崩溃。谁能告诉我什么是错的以及为什么该计划不会运行? IntelliJ告诉我问题是在第一个if if行或for循环中的嵌套if语句,如果这有帮助。
答案 0 :(得分:2)
你正在索引a[i+1]
,但是a是int [degree + 1],所以在循环结束时你试图达到[度+ 1],并且没有这样的项目,最后一个一个是[学位]
可能你需要:
} else if (i < degree && a[i + 1] >= 0 && a[i + 1] < degree) {
顺便说一句,你的代码中还有另一个不合逻辑的部分。例如:
if (a[i] == degree) {
你将[i]与学位进行比较,但它与学位无关。您可能想要比较i == degree
。见这个例子:
degree = 2
a[0] = 7, a[1] = 2, a[2] = 3 // 7 * x^2 + 2 * x + 3
如您所见,您应该将度数与索引进行比较,而不是与数组项的值进行比较。
我建议你用以下提示重写代码:尝试使用数组中的索引而不是“其他方式”。它会更自然,每个指数都是指数:
a[2] = 7, a[1] = 2, a[0] = 3 // note: 3 * x^0 = 3 * 1 = 3
由于你无论如何填写数组中的所有元素,如果你按递减顺序循环它并不重要。
答案 1 :(得分:0)
else if (a[i + 1] >= 0 && a[i + 1] < degree)
这似乎是你的问题。你将达到数组+ 1的大小。我的猜测是你的错误是ArrayIndexOutOfBoundsException