尝试在Java中交换数组中的值

时间:2015-03-23 22:56:43

标签: java

我使用选择方法来解决这个问题,但我遇到了一些问题。看到答案之后,我在程序中发现了两个错误然后修复它。我很困惑为什么会出现这两个错误,有人能帮我解释一下吗?

这是我的代码:

import java.util.Scanner;
public class JavaTest{
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    int[] myList = new int[5];
    for (int i = 0; i < 5; i++){
        myList[i] = input.nextInt();
    }

    for (int i = 0; i < 4; i++){
        int j = 0;

        // Why do I need to put this outside inner for loop?
        int smallest = myList[i];

        // Why do I need to give the value of i to index after i increase by 1?
        int index = i;

        for (j = i + 1; j < 5; j++){
            if (smallest > myList[j]){
                smallest = myList[j];
                index = j;
            }
        }

        if (index != i){
            myList[index] = myList[i];
            myList[i] = smallest;
        }

    }

    for (int i = 0; i < 5; i++){
        System.out.print(myList[i] + " ");
    }

    input.close();
}
}

1 个答案:

答案 0 :(得分:1)

选择算法是一种用于在列表或数组中查找第k个最小数字的算法。

每次迭代算法都会找到最小的数字i到myList.length:

第一次迭代在0到4之间

第二次迭代在1到4之间等等......

    // Why do I need to put this outside inner for loop?
    int smallest = myList[i];

在第一次迭代之后,“最小”的值将是列表中的实际最小数字而不是索引1到4中的最小数字,然后内部循环将不执行任何操作。

    // Why do I need to give the value of i to index after i increase by 1?
    int index = i;

将索引初始化为(可疑)最小数字的当前位置。如果“最小”的当前值是迭代中的最小数字,则第二个“for循环”将不会执行任何操作。

然后条件:

  

(索引!= i)

即使它不应该

也是如此