- /*
- 需求:分析以下需求,并用代码实现
- (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]
- 思路:
- 1.因为要键盘录入数据,所以要用到Scanner对象。有因为要将录入的数据存入数组中,所以我用静态初始化的方式定义数组。
- 2.反转数组中的数据其实就是将第一个元素和最后一个元素调换,然后再将第二个元素与倒数第二个元素调换……………………,由此可以看出每进行一次调换就有两个元素发生了变化。
- 所以只需要操作数组长度的二分之一次就可以完成反转,这里我用for循环完成。
- 3.因为要对数组角标为奇数的元素位置互换(1和3换 3和5换),所以我从3角标开始往后循环,然后判断当前角标%2时候为1如果为1就和当前角标-2角标所对应的元素互换。
- 4.又因为最后一个角标为奇数的元素还要和第一个角标为奇数的元素(1角标)位置进行互换,所以在上一步的循环中还要判断当前为奇数的角标是不是最一个奇数角标,
- 如果是就在和1角标互换一次。
- 5.将数组中的每个元素打印输出。
- */
- import java.util.Scanner; //导包
- class Day05Task4 {
- public static void main(String[] args) {
- int[] arr = new int[6];
- Scanner sc = new Scanner(System.in); //创建键盘录入对象
- //思路中的第1步:初始化数组。
- for (int x = 0; x < arr.length; x++) {
- System.out.println("请输入第 " + (x + 1) + " 个整数:");
- arr[x] = sc.nextInt(); //接受键盘录入的数据,并放到素组中。
- }
- printArray(arr); //打印数组中的元素
- //思路中的第2步:反转数组。
- for (int x = 0; x < arr.length / 2; x++) {
- changeArray(arr, x, arr.length - 1 - x);
- }
- //思路中的第3步:奇数角标的互换 + 第4步:最后一个奇数与第一个奇数角标的值互换。
- for (int x = 3; x < arr.length; x++) {
- if (x % 2 == 1) {
- changeArray(arr, x, x-2); //位置互换
- if (x == arr.length-1 || ++x == arr.length - 1) { //如果x已经是最大角标,或者x+1为最大角标,就说明x是最后一个奇数角标
- changeArray(arr, x, 1);
- }
- }
- }
- printArray(arr); //打印数组中的元素
- }
- //定义一个函数,函数的功能是转换数组元素的位置
- public static void changeArray(int[] arr, int a, int b) { //需要三个参数,int一维数组、int、int。没有返回值。
- int temp = arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
- //定义一个函数,功能是遍历打印数组
- public static void printArray(int[] arr) { //需要一个参数,int一维数组。没有返回值。
- System.out.println("数组中的元素有(0~" + arr.length + "角标):");
- for (int x = 0; x < arr.length; x++) {
- System.out.print(arr[x] + " ");
- }
- System.out.println("\n");
- }
- }
复制代码 |