【问题标题】:Exchange smallest index in array with another Java用另一个 Java 交换数组中的最小索引
【发布时间】: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 变量,我相信您应该这样做。结合起来,我想你可能会得到你想要的答案。

标签: java arrays methods


【解决方案1】:

您在函数中使用索引 (i) 而不是 for 循环中的值,循环应该是

for(int i = 1; i < arr.length; i++) {
    if(arr[i] < arr[0]) {
        tmp = arr[0];
        arr[0] = arr[i];
        arr[i] = tmp;
    }
}

【讨论】:

  • 谢谢你。说得通。很好的学习课。谢谢!!
猜你喜欢
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 2021-09-03
  • 2014-06-12
相关资源
最近更新 更多