黑马程序员技术交流社区

标题: 定义一个方法将数组中的奇数放在左侧,偶数放在右侧 [打印本页]

作者: yeluoxingye    时间: 2017-2-27 21:22
标题: 定义一个方法将数组中的奇数放在左侧,偶数放在右侧
这个是练习题:
两种方法:
一种我自己的
//定义一个方法将奇数放在数组的左侧,偶数放在数组的右侧
        public static void method1(int[] arr) {
                //获取数组中奇数和偶数的个数
                int count = 0;
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] % 2 != 0) {
                                count++;
                        }
                }
               
                //创建新数组存储原数组中的奇数
                int[] arrJ = new int[count];
                count = 0;
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] % 2 != 0) {
                                arrJ[count] = arr[i];
                                count++;
                        }
                }
               
                //创建新数组存储原数组中的偶数
                int[] arrO = new int[arr.length - count];
                count = 0;
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] % 2 == 0) {
                                arrO[count] = arr[i];
                                count++;
                        }
                }
               
                //奇数存左边,偶数存右边
                for (int i = 0; i < arrJ.length; i++) {
                        arr[i] = arrJ[i];
                }
               
                for (int i = 0; i < arrO.length; i++) {
                        arr[i + arrJ.length] = arrO[i];
                }
        }

一种是老师的
public static void change(int[] arr) {
                //创建一个新数组,长度与原数组相同
                int[] newArr = new int[arr.length];
                //定义两个变量,从数组的头开始,和从数组的尾开始
                int index1 = 0;
                int index2 = arr.length - 1;
                //遍历传入的数组
                for (int i = 0; i < arr.length; i++) {
                        if (arr[i] % 2 != 0) {
                        //如果该元素是奇数,从数组左侧开始存
                                newArr[index1++] = arr[i];
                        }else {
                        //如果该元素是偶数,从新数组右侧开始存
                                newArr[index2--] = arr[i];
                        }
                }
               
                //将新数组中的元素复制到传入的数组中
                for (int i = 0; i < newArr.length; i++) {
                        arr[i] = newArr[i];
                }
        }

两种方法元素的顺序会不太一样,但是都满足题目的要求
作者: 北海北    时间: 2017-2-28 07:30
写的挺好的

作者: lvshen9    时间: 2017-2-28 09:08
赞一个

作者: yaoliansheng    时间: 2017-11-20 15:25
  //将新数组中的元素复制到传入的数组中
                for (int i = 0; i < newArr.length; i++) {
                        arr[i] = newArr[i];
                }
最后这一步多余的,直接把新数组赋值给旧数组就好了啊;
arr = newArr;
这样就好了;更好点的;




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