黑马程序员技术交流社区

标题: 一道题包括了数组的多种问题 [打印本页]

作者: 糊涂真好    时间: 2016-2-19 11:46
标题: 一道题包括了数组的多种问题
import java.util.Scanner;

/**
* 4.分析以下需求,并用代码实现:
*        (1)键盘录入6个int类型的数据存数数组arr中
*        (2)将arr数组中的内容反转
*        (3)将翻转后的数组角标为奇数的互相交换 1和3换, 3和5换,以此类推
*        (4)最后将数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
*        (5)打印最终的数组(实现了1-4步之后的数组)
*        (6)如:用户输入的6个int数字为[1,2,3,4,5,6],最后输出的结果为[6, 5, 4, 1, 2, 3]
* @author JX
*
*/
public class Test04 {
        public static void main(String[] args) {
                //1.通过键盘录入获取数组
                int[] arr = getArrayByKeyBoard();
                //2.按照要求给数组加密
                getSecurityArray(arr);
                //3.打印数组内容
                print(arr);               
        }       
        //1.通过键盘录入6个int类型的数字并存入数组中
        public static int[] getArrayByKeyBoard() {
                int[] arr = new int[6];
                Scanner sc = new Scanner(System.in);
                System.out.println("请依次输入6个整数:");
                for(int i=0;i<arr.length;i++) {
                        arr[i] = sc.nextInt();
                }
                return arr;
        }
        //2.数组反转
        public static void reverseArray(int[] arr) {
                int startIndex = 0;//最开始的索引
                int endIndex = arr.length-1;//最后的索引       
               
                for(;startIndex<=endIndex;startIndex++,endIndex--) {                       
                        swap(arr,startIndex,endIndex);
                }               
        }       
        //3.交换arr数组中角标为startIndex和endIndex的元素
        private static void swap(int[] arr, int startIndex, int endIndex) {
                int temp = arr[startIndex];
                arr[startIndex] = arr[endIndex];
                arr[endIndex] = temp;
        }
        //4.数组的反转 反转后的数组 角标为奇数的互相换 1 和3换 3和 5换以此类推
        public static void reverseArrayByIndex(int[] arr){
                //i=1,j=3;i=3,j=5;i=5,j=7
                for(int i=1,j=i+2;i<arr.length&&j<arr.length;i+=2,j+=2) {
                        swap(arr,i,j);
                }
               
        }
        //5.然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
        private static void swap(int[] arr){
                //数组中的最后一个为奇数的角标
                int lastIndex = (arr.length-1)%2==0?arr.length-2:arr.length-1;
                swap(arr,1,lastIndex);
        }
        //6.打印数组,如果长度为0,打印[],如果数组为null,打印null,否则打印格式如:[1, 2, 3, 4, 5, 6]
        public static void print(int[] arr){
                //如果数组为null,打印null
                if(arr==null) {
                        System.out.println("null");
                        return;
                }
                //如果长度为0,打印[]
                if(0==arr.length) {
                        System.out.println("[]");
                        return;
                }
                System.out.print("[");
                for(int i =0;i<arr.length;i++) {                               
                        System.out.print(arr[i]);
                        if(i!=arr.length-1)
                                System.out.print(", ");
                }
                System.out.println("]");
        }
        //7.直接获取加密后的数组
        public static void getSecurityArray(int[] arr) {
                //1.数组反转
                reverseArray(arr);
                //2.将翻转后的数组角标为奇数的互相交换 1和3换, 3和5换,以此类推
                reverseArrayByIndex(arr);
                //3.然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
                swap(arr);
        }
}





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