打印出一个Array Java

时间:2016-02-09 22:20:20

标签: java arrays if-statement for-loop intellij-idea

我写了这个程序:

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语句,如果这有帮助。

2 个答案:

答案 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