数字列出数组
Numerically listing Arrays
所以我的代码有问题。这是我想要做的:让一个数组具有原始的一组数字(最多 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]);
}
}
}
- 在您的 for 循环中,您将 i 限制设置为 array1[i] 值而不是数组长度,这肯定是错误的。
- 你在外层大 'for' 循环的其他循环中重用相同的索引 i,因此 i 值将被内部循环弄乱
- 您从未将 array1 的值复制到 array2
您有几个问题需要解决才能制作您的程序 运行:
您忘记将 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]);
}
你的排序算法有一个额外的循环:
有最外层的循环是没有意义的:你的冒泡排序算法没有它也能完美运行,所以你应该删除循环,并将其主体向上移动一层嵌套:
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;
}
}
所以我的代码有问题。这是我想要做的:让一个数组具有原始的一组数字(最多 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]);
}
}
}
- 在您的 for 循环中,您将 i 限制设置为 array1[i] 值而不是数组长度,这肯定是错误的。
- 你在外层大 'for' 循环的其他循环中重用相同的索引 i,因此 i 值将被内部循环弄乱
- 您从未将 array1 的值复制到 array2
您有几个问题需要解决才能制作您的程序 运行:
您忘记将 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]);
}
你的排序算法有一个额外的循环:
有最外层的循环是没有意义的:你的冒泡排序算法没有它也能完美运行,所以你应该删除循环,并将其主体向上移动一层嵌套:
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;
}
}