我在这个论坛上搜索有类似我的问题的人,我无法找到为什么我的程序除了看起来很稳定之外还没有正常工作。我刚刚开始学习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
从未初始化。
答案 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循环说我需要将
i
与n
进行比较,以决定是否应该继续执行循环。但我甚至不知道f ** kn
的价值是什么!
这就是为什么抱怨这个。
如何解决此问题:
这取决于您是否将其他数字视为无效输入。如果这样做,您可以在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 {
// ...
}