A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个是练习题:
两种方法:
一种我自己的
//定义一个方法将奇数放在数组的左侧,偶数放在数组的右侧
        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];
                }
        }

两种方法元素的顺序会不太一样,但是都满足题目的要求

3 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
  //将新数组中的元素复制到传入的数组中
                for (int i = 0; i < newArr.length; i++) {
                        arr[i] = newArr[i];
                }
最后这一步多余的,直接把新数组赋值给旧数组就好了啊;
arr = newArr;
这样就好了;更好点的;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马