【发布时间】:2020-11-08 17:44:50
【问题描述】:
我正在尝试解析我的数组,它会在其中找到最小的数字,将其移到前面,然后将该 [0] 数字与小数字交换。所以基本上换地方了。 我正在使用 for 循环来解析并找到最小的数字,但是,它在前面输出第三个最小的数字。我确信这是一个小错误。请提供一个简短的解释,我想确保我理解。
代码:
int [] arr = { 123, 177, 127, 173, 187, 148, 187, 94, 76, 61, 123, 78, 121, 5, 71, 139, 13, 18, 97, 144, 50, 137, 96, 36, 1, 162, 161, 21 }
public static void moveSmallestToLeft(int[] arr) {
int tmp = arr[0];
for(int i = 0; i < arr.length; i++) {
if(arr[i] < tmp) {
arr[0] = i;
i = tmp;
}
}
System.out.println(Arrays.toString(arr));
}
我得到的输出:
[7, 177, 127, 173, 187, 148, 187, 94, 76, 61, 123, 78, 121, 5, 71, 139, 13, 18, 97, 144, 50, 137, 96, 36, 1, 162, 161, 21]
如您所见,7 并不是数组中的最小数字。它是 1 ......我可以通过什么方式调整它以交换正确的索引?在此先感谢大家。
【问题讨论】:
-
我看到了一些可能导致此问题的小错误。首先,当您在 if 语句中引用 i 时,当我认为您应该引用 arr[i] 时,您正在引用索引。其次,您没有重置 tmp 变量,我相信您应该这样做。结合起来,我想你可能会得到你想要的答案。