黑马程序员技术交流社区

标题: 关于数组交换的问题 [打印本页]

作者: huizhong    时间: 2016-7-3 22:33
标题: 关于数组交换的问题
本帖最后由 huizhong 于 2016-7-3 23:16 编辑

class LianXi003 {
public static void main(String[] args) {
  int[] arr = {1,2,3,4,5,6};
  int first = arr[0];    //数组第一个元素
  int end = arr[arr.length-1]; //数组最后一个元素
  
  //交换
  int temp = 0;  
  temp = first;
  first=end;
  end = temp;

  print(arr);  //遍历

}
/*
数组的遍历
返回值类型void
参数类型 inti
*/
public static void print(int[] arr) {
  for (int i = 0;i < arr.length ;i ++ ) {
   System.out.print(arr+" ");
  }
}
}
我想问一下红字部分的交换不成功是为什么


作者: 张雨    时间: 2016-7-3 22:41
没看出红字有问题啊  数组遍历输出应该是arr【i】吧?
作者: huizhong    时间: 2016-7-3 23:17
张雨 发表于 2016-7-3 22:41
没看出红字有问题啊  数组遍历输出应该是arr【i】吧?

谢谢朋友的指点,
红字部分是我写的数组的交换
但是不会交换
好像数组的交换要交换元素的索引
作者: wstm198907    时间: 2016-7-3 23:19
已经get!
作者: 15820030540    时间: 2016-7-3 23:34
交换不成功问题在于,你没有对数组中的数据进行操作,你红色的部分交换的仅仅是first 和 end两个变量的值,其实,原来first和end两个变量所指向的是数组中第一个数和最后一个数,但你要是这么交换的话,first和end所指向的就不是数组中的数了,要想交换成功 需要改成 int temp = 0; temp = arr[0];arr[0] = arr[arr.length-1];
arr[arr.length-1] = temp;即可,而不是用他们的引用变量first和end操作。
作者: yin12310    时间: 2016-7-3 23:37
数组交换是数组里面的元素和元素进行交换,不是值跟元素交换。如果是值跟元素交换 会改变数组在堆中的值
作者: 新人—小明同学    时间: 2016-7-3 23:43
用for循环控制对调次数..红色部分只做了一次对调动作.
作者: huizhong    时间: 2016-7-3 23:54
15820030540 发表于 2016-7-3 23:34
交换不成功问题在于,你没有对数组中的数据进行操作,你红色的部分交换的仅仅是first 和 end两个变量的值, ...

这位同学说的在理,我觉得我的这个错误可以出个题了 哈哈哈哈哈哈哈
作者: 芒果小姐    时间: 2016-7-4 00:11
涨知识了耶 也是我想了解的
作者: 呆呆的小呆    时间: 2016-7-4 00:13
学习到了
作者: gaojiangjian    时间: 2016-7-4 00:22
变量值交换了,数组元素没交换




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