声明: 那个k = 0;是我故意改的.我想知道当我写k = 0的输出结果.
运行时我输入的数字是:3 8 5 1 9 2 7 4 6
但输出的结果却是:8 5 3 9 2 7 4 6 1 为什么呢?第一个数不应该是1吗? 8怎么来的?
public class Text {
  public static void main(String []args) {
    int[] a = new int[args.length];    for (int i=0; i<a.length; i++) {
      a[i] = Integer.parseInt(args[i]);
      
    }
    
    print(a);
    minToMax(a);
    print(a);
    
  }  private static void minToMax(int[] a) {
    int k,temp;    for (int i=0; i<a.length; i++) {
      k = 0;      for (int j=k+1; j<a.length; j++) {
        if (a[j] < a[k]) {
          k = j;
        }
      }      if (k != i) {
        temp = a[i];
        a[i] = a[k];
        a[k] = temp;
        
      }
    }    
  }  private static void print(int[] a) {
    for (int i=0; i<a.length; i++) {
      System.out.print(a[i]+" ");       
    }
    System.out.println();
  }
}

解决方案 »

  1.   

    程序第一个运行完,a[0]=1了,第二次循环由于k又等于0 所以a[k]为1 最小 第一个if不执行。
    但是i=1 != k=0 又满足第二个if语句。所以把1换成了8。楼主仔细看看应该就知道错误所在了!
    我帮你改了下
    private static void minToMax(int[] a) {
      int k,temp;  for (int i=0; i<a.length; i++) {
      k = i;

      for (int j=k+1; j<a.length; j++) {
      if (a[j] < a[k]) {
      k = j;
      }
      }

      if (k != i) {
      temp = a[i];
      a[i] = a[k];
      a[k] = temp;
        
      }
       }   
      }
      

  2.   

    因为你每次都把k设成了0,那么每次外层循环的之后k都标志着左右数种的最小值,一次第一次外层循环结果是这样的:
    1 8 5 3 9 2 7 4 6
    第二次:
    8 1 5 3 9 2 7 4 6 
    第三次:
    8 5 1 3 9 2 7 4 6 
    一次类推....注意:每次外层循环 i 是在递增的,一次外层循环只不过是判断i的值是不是最小数1 的位置而已,是就交换,不是就不交换