数组未正确初始化

时间:2016-03-21 04:30:16

标签: java arrays initialization

我在这个论坛上搜索有类似我的问题的人,我无法找到为什么我的程序除了看起来很稳定之外还没有正常工作。我刚刚开始学习Java所以我不确定这里是否存在某种语法错误,或者它是否更多,但我一直在盯着它,这个网站过去一小时我都没看到怎么了。

public class BubbleSort {

    public static void main(String[] args) {
        int a, b, n, change, i, operations, choice;
        Scanner input = new Scanner(System.in);
        System.out.println("Would you like to add your own numbers?");
        System.out.println("enter '1' for no and '2' for yes");
        choice = input.nextInt();

        if (choice == 1) {
            int[] array = {
                5,
                7,
                3,
                9,
                1,
                0,
                6
            };
            n = 7;
        } else if (choice == 2) {

            System.out.println("How many numbers would you like to add to the" +
                "Array? (Add up to 10)");
            n = input.nextInt();

            int array[] = new int[n];

            System.out.println("Input " + n + " integers");

            for (a = 0; a < n; a++) {
                array[a] = input.nextInt();
            }
        }

        System.out.println("Bubble Sort operation:");

        for (a = 0; a < (n - 1); a++) {
            System.out.print("iteration " + (a + 1) + ": ");

            for (b = 0; b < n - a - 1; b++) {
                if (array[b] > array[b + 1]) {

                    change = array[b];
                    array[b] = array[b + 1];
                    array[b + 1] = change;
                    operations++;

                }
            }
            for (i = 0; i < n; i++) {
                System.out.print(array[i]);
            }
            System.out.println();
        }

        System.out.print("Finished array after bubble sort: ");
        for (i = 0; i < n; i++) {
            System.out.print(array[i]);
        }
        System.out.println();
        System.out.println("This operation took " + operations + " cycles");
        System.out.println();
    }
}

这只是一个简单的冒泡程序,但我在这里真的很难过。什么想法会有什么不对?该错误表示n从未初始化。

1 个答案:

答案 0 :(得分:2)

Java编译器告诉你这一点,因为可能没有初始化变量n

&#34;但我做到了!我写了n = 7;n = input.nextInt();!这不叫做初始化&#39;?&#34;您询问。你是完全正确的!您确实在这些地方初始化了n。但是,根据您的代码,n仅在choice为1或2时初始化。如果choice为3,该怎么办?或-999?如果是这种情况,n将不会被初始化,对吧?

我们说choice是-999。将跳过两个if语句,并直接执行冒泡排序部分。执行完之后,就会出现以下代码:

    System.out.print("Finished array after bubble sort: ");
    for (i = 0; i < n; i++) {
        System.out.print(array[i]);
    }
    System.out.println();
    System.out.println("This operation took " + operations + " cycles");
    System.out.println();

它说,

  

Waaaaait一分钟,for循环说我需要将in进行比较,以决定是否应该继续执行循环。但我甚至不知道f ** k n的价值是什么!

这就是为什么抱怨这个。

如何解决此问题:

这取决于您是否将其他数字视为无效输入。如果这样做,您可以在if语句中编写else子句

else {
    System.out.println("Input Invalid. Program will now exit.");
    return;
}

如果要将其他数字视为用户输入2,请将else if子句更改为else。或者你可以写

n = 0;

一开始。

另外,我注意到你有另一个错误。在if语句中,你写了这个:

int[] array = {
     5,
     7,
     3,
     9,
     1,
     0,
     6
};

和此:

int array[] = new int[n];

在if语句之外无法访问这两个数组。我想你只需要在if语句之外声明一个数组,如下所示:

int[] array =  {
     5,
     7,
     3,
     9,
     1,
     0,
     6
};
if (choice == 1) {
    // The original declaration should be removed
    n = 7;
} else {
    // ...
}