所以我的代码出了问题。这就是我想要做的:让一个数组具有原始数字集(最多10个数字),然后将这些数字复制并粘贴到第二个数组上。然后,第二个区域以数字形式列出第一个数组中的数字(从最低数字到最高数字)。
问题是......我的第二个输出是给我一个好的输出,最低的数字是最高的数字,但是,同时,我得到一长串的重复数字和一吨零如果我使用-9000
输入停止我的代码。谁能告诉我问题是什么以及如何解决?顺便说一下,我不想用Array.sort()选项对第二个数组进行排序。除了扫描仪之外不能导入任何东西:
public static void main(String[] args) {
System.out.println("Input up to '10' numbers for current array: ");
int[] array1 = new int[10];
int i;
Scanner scan = new Scanner(System.in);
for (i = 0; i < 10; i++) {
System.out.println("Input a number for " + (i + 1) + ": ");
int input = scan.nextInt();
if (input == -9000) {
break;
} else {
array1[i] = input;
}
}
System.out.println("\n" + "Original Array: ");
for (int j = 0; j < i; j++) {
System.out.println((j + 1) + ": " + array1[j]);
}
System.out.println("\n" + "Organized Array: ");
int[] array2 = new int[i];
for (i = 0; i < array1[i]; i++) {
System.out.println(+array1[i]);
for (int j = 0; j < i; j++) {
int temp;
boolean numerical = false;
while (numerical == false) {
numerical = true;
for (i = 0; i < array1.length - 1; i++) {
if (array2[i] > array2[i + 1]) {
temp = array2[i + 1];
array2[i + 1] = array2[i];
array2[i] = temp;
numerical = false;
}
}
}
}
for (i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
}
}
答案 0 :(得分:1)
您需要修复几个问题才能运行程序:
您忘记将array1
复制到array2
:
您认为来自排序array2
的输出实际上来自排序过程。
int[] array2 = new int[i];
for (int j = 0; j < i; j++) {
array2[j] = array1[j];
}
您将已排序数组的输出放在执行排序的循环中:
检查大括号的级别,并将输出循环移到排序循环之后
for (i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
您的排序算法有一个额外的循环:
拥有最外层的循环是没有意义的:你的bubblesort算法在没有它的情况下工作得很好,所以你应该删除循环,并将它的主体向上移动一层嵌套:
for (i = 0; i < array1[i]; i++) { // Remove the loop
... // <<== Keep the body
}
您的最内层循环错误地重用i
:
将循环变量i
替换为另一个变量,例如m
for (int m = 0 ; m < array2.length - 1; m++) {
if (array2[m] > array2[m + 1]) {
temp = array2[m + 1];
array2[m + 1] = array2[m];
array2[m] = temp;
numerical = false;
}
}
答案 1 :(得分:0)