黑马程序员技术交流社区

标题: 基础的小问题 [打印本页]

作者: 7jianpan    时间: 2014-7-22 21:44
标题: 基础的小问题
  为什么这样写输出没有排序
 
          public static void arraySort1(int[] arr)
          {
                  for (int i=0; i<arr.length-1;i++ )
                  {
                          for (int j=0;j<arr.length-i-1 ;j++ )//-x让每一次参与比较的角标减少,-1避免越界
                          {
                                  if (arr[j]>arr[j+1])
                                  {
                                          swap(arr[j],arr[j+1]);
                                  }
                          }
                  }       
          }
  
  public static void swap(int a,int b)// 这个是错的,正确的应该是:public static void swap(int[] arr,int a,int b){ int temp=arr[a];  arr[a]=arr[b];  arr[b]=arr[a];} 上方对应的语句应该是,swap(arr,j,j+1);,我想知道这个为什么不行。
  {
          int temp=a;
          a=b;
          b=temp;
  }
作者: 7jianpan    时间: 2014-7-22 21:46
正确的
public static void swap(int[] arr,int a,int b)
{
      int temp=arr[a];
      arr[a]=arr[b];
      arr[b]=arr[a];
}
想知道上面错的为什么错
作者: HPU--spring87    时间: 2014-7-22 21:58
第一个看不懂,很乱,你不就想交换数组吗?那就遍历跟int a,b;交换一样,需要一个中间变量。
作者: 杨冬冬    时间: 2014-7-22 22:56
正确的应该是
public static void swap(int[] arr,int a,int b)
{
      int temp=arr[a];
      arr[a]=arr[b];
      arr[b]=temp;
}
作者: star5603    时间: 2014-7-22 23:44
错的方案:
你只是把数组的两个元素传进去,当做普通的两个int数值a和b传进去,函数只是对两个传入的两个数进行了置换。
但是,没和你的数组产生任何联系,自然不会对数组的元素进行置换。所以,对的那种有角标联系,就能置换。
作者: 止询初衷    时间: 2014-7-22 23:59
。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2