Java基础0.9

数组练习

public class Demo1 {
	punlic static void main(String[] args) {
		int[] array = {1,3,5,7,9,11,13}
		maxIndexInArray(array);
	}
	/*
    1. 定义一个方法,可以找出指定int类型数组中最大值下标位置

    方法分析:
        方法名:
            maxIndexInArray
        形式参数列表:
            这里需要一个int类型的数组 int[] array
        返回值类型:
            这里希望得到的是最大值下标,所有返回值类型是下标范围,就是int类型
            public static int maxIndexInArray(int[] array)
       */
       public static int maxIndexInArray(int[] array) {
        // 1. 假设下标为0的数据时最大值
			int maxIndex = 0;
		 /*
          2. 利用循环进行两两比较,并且数据比较从1开始
         */
			for(i=1;i<=array.leangh;i++) {
		// 3. 判断下标为maxIndex元素如果小于下标为 i的元素,保存下标 i的maxIndex去
				if(array[maxIndex] < array[i]) {
					maxIndex = i;
				}
		  }
		  return maxIndex;
	}
       /*
       2. 定义一个方法,可以找出指定int类型数组中最小值下标位置
       方法分析:
          方法名:
             minIndexInArray
          形式参数列表:
             这里需要一个int类型的数组 int[] array
          返回值类型:
              这里希望得到的是最小值下标,所有返回值类型是下标范围,就是int类型
         public static int minIndexInArray(int[] arra)
        */
      /**
        * 找出指定数组中最小下标的元素
        * @param array 指定的int类型数组
        * @return 当前数组中最小值的下标位置
      */
      public static int minIndexInArray(int[] arra) {
			int minIndex = 0;
			for(i = 1; i <= array.length; i++) {
				if(array[minIndex] > array[i]) {
					minIndex = i;
				}
			}
			return minIndex;
	}
	/*
	3. 定义一个方法,在指定int类型数组中,找出指定int类型数据所在的下标位置
	找到返回值下标值: 0 ~ arr.length - 1
	找不到返回 -1
	方法分析:
    	方法名:
        	indexOf
    形式参数列表:
        第一个: 需要一个 int类型的数据 int[] array
        第二个: 确定需要查询的数据, int    int find
    返回值类型:
            int类型,找到返回值大于等于0,没有找到返回-1
    public static int indexOf(int[] array, int find)
*/

/**
 * 找出指定数据在指定数组中下标位置,找到返回值大于等0,没有找到返回-1
 * @param array 查询数据的数组 int类型数组
 * @param find 查询的指定数据 int类型数据
 * @return 找到返回值大于等0,没有找到返回-1
 */
  public static int indexOf(int[] array, int find) {
  		//假设涨不到数据
  		int index = -1;
  		// 2. 利用循环,两两比较,找出指定数据在数组中下标位置,并且保存到index变量中
  		for(int i = 0; i <array.length; i++) {
  		// 3. 下标为 i的元素就是指定 find数据,你们保存 下标 i到 index变量中
  			if(array[i] == array[find]) {
  				index = i;
  				 // 如果找到数据,终止循环!!!break;
  				 break;
  			}
  		}
  		return index;
  }
}

数组算法示例

public class FindAllInArray {
    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9, 1, 3, 5, 7, 9};
        int[] indexes = new int[arr.length];

        int count = findAllIndexes(arr, indexes, 5);
        System.out.println(count);

        for (int i = 0; i < count; i++) {
            System.out.println(indexes[i]);
        }
    }

    /*
    4. 在一个数组中,找出所有指定数据的下标位置 【难】
    方法分析:
        方法名:
            findAllIndexes 找出所有指定元素的下标位置
        形式参数列表:
            1. 哪一个数组中进行查询操作!!! int[] arr
            2. 要查询的数据 int find
            3. 需要另外的一个数组,保存找到的下标位置
                a) 该数组是什么是就类型??? int类型数组
                b) 该数组的容量应该是什么???
                    和需要查询的目标数组容量是一致的!!!
        返回值类型;
            不考虑使用数组作为返回值,这里存在一定的隐患】
            boolean: 运行成功返回true,运行失败返回false
            int: ???
                返回找到的数据有多少个

        public static int findAllIndexes(int[] arr, int[] indexes, int find)
    */

    /**
     * 找出数组中指定元素 find在目标数组 arr的下标位置,并且保存到 indexes 数组中
     * 返回值是找到的元素个数,没有找到,返回 0
     * @param arr 查询数据目标数组,int类型
     * @param indexes 保存找到数据下标位置的数组,int类型
     * @param find 需要查询的数据,int类型
     * @return 返回值找到的元素个数,没有找到,返回 0
     */
    public static int findAllIndexes(int[] arr, int[] indexes, int find) {
        // 1. 参数合法性判断
        if (null == arr || null == indexes || arr.length == 0
                || indexes.length == 0 || indexes.length < arr.length) {
            System.out.println("Input parameter is invalid!");
            // 返回 0。结束方法,表示没有找到
            return 0;
        }

        // 2. 定义一个变量,计数
        int count = 0;

        // 3. 使用 for循环,遍历目标数组 arr,使用 if判断,找到目标元素
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == find) {
                /*
                a. 计数 count++ 
                b. 把找到的下标位置放到 indexes数组中
                第一次找到:
                    需要存放到下标为 0的位置,count++ count自增之前是 0
                第二次找到:
                    需要存放到下标为 1的位置,count++ count自增之前是 1

                indexes是存放下标位置的数组,count是计数有多少个目标数据
                i是找到的下标位置
                count同时可以表示当前 indexes数组中的有效元素个数
                 */
                indexes[count++] = i;
            }
        }

        return count;
    }
}
public class ArrayReplace {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0};

        boolean ret = replace(array, 10);
        System.out.println(ret);
        System.out.println(Arrays.toString(array));
    }

    /*
    5. 完成一个方法,替换掉数组中所有元素之为0的元素,替换为指定元素
    方法分析:
        方法名:
            replace
        形式参数列表:
            需要替换数据的int类型数据
            需要指定的元素 int类型
            (int[] array, int newNumber)
        返回值类型:
            不推荐使用void,使用void作为返回值的方法,是一个黑盒方法!!!
            给予当前方法一个状态的监控!!!
            boolean 方法运行成功返回true,失败返回一个false
            这玩意能失败???
                1. 如果数组的容量为0??? 会失败!!!
                2. 数组名是一个引用数据类型,其中保存的内存地址不能为 null 会失败!!!

        public static boolean replace(int[] array, int newNumber)
    */

    /**
     * 替换指定数据中元素为 0的值,替换为 newNumber
     * @param array int类型数组
     * @param newNumber 替换的int类型数组
     * @return 方法运行成功返回 true,方法运行失败,返回 false
     */
    public static boolean replace(int[] array, int newNumber) {
        // 1. 参数合法性判断!!!
        if (null == array || array.length == 0) {
            System.out.println("输入参数不合法!!!");
            // 输入参数不合法,返回 false 告知调用者,方法执行失败!!!
            return false;
        }

        for (int i = 0; i < array.length; i++) {
            if (0 == array[i]) {
                array[i] = newNumber;
            }
        }

        return true;
    }
public class ArrayRemove {
    public static void main(String[] args) {
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};

        remove(array, 0);
        System.out.println(Arrays.toString(array));
    }

    /*
    6. 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
    要求源数据数组是
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
        删除之后,需要在数组的末尾补0,0是无效元素
    方法分析:
        方法名:
            remove / delete
        形式参数列表:
            1. 删除数据的目标数组 int[] arr
            2. 指定删除数据的下标位置 int index
        返回值类型:
            boolean 删除成功返回true,失败返回false
            什么情况下会失败:
                a) 数组容量为0
                b) 数组中保存的地址为 null
                c) 给予的删除下标是一个非法下标
        public static boolean remove(int[] arr, int index)
    */

    /**
     * 在指定数组中,删除指定下标 index上的元素。
     * @param arr 指定的 int类型数组
     * @param index 指定的删除数据的下标,但是不能超出数组的有效下标范围 0 ~ arr.length - 1
     * @return 删除操作成功返回 true,失败返回 false
     */
    public static boolean remove(int[] arr, int index) {
        // 1. 参数合法性判断
        if (null == arr || arr.length == 0 || index < 0 || index > arr.length -1 ) {
            System.out.println("Input parameter is invalid!");
            return false;
        }

        /*
         2. 使用 for循环完成操作
         这里使用 arr[i] = arr[i + 1];
        */
        for (int i = index; i < arr.length - 1; i++) {
            arr[i] = arr[i + 1];
            /*
            index = 5; arr.length = 10;
            arr[5] = arr[6]; i++ == 6
            arr[6] = arr[7]; i++ == 7
            arr[7] = arr[8]; i++ == 8
            arr[8] = arr[9]; i++ == 9
            arr[9] = arr[10]; ArrayIndexOutOfBoundsException
             */
        }

        arr[arr.length - 1] = 0;

        return true;
    }

```java
public class ArrayInsert {
    public static void main(String[] args) {
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 0};

        add(array, 20, 30);

        System.out.println(Arrays.toString(array));
    }

    /*
    7. 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
    要求源数据数组是
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 0};
        0是无效元素,表示目前数组存在一个空位置
    方法分析:
        方法名:
            add
        形式参数列表:
            1. 数组 int[] arr
            2. 指定下标位置 int index
            3. 添加的数据  int number
        返回值类型:
            boolean 成功返回true,失败返回false
            什么情况下会失败:
                a) 数组容量为0
                b) 数组中保存的地址为 null
                c) 给予的删除下标是一个非法下标

        public static boolean add(int[] arr, int index, int number)
    */

    /**
     * 在数组中指定位置,添加指定元素
     *
     * @param arr    指定的操作的数据,为 int类型
     * @param index  指定的下标位置,必须是在数组的有效下标范围以内 0 ~ 数组容量 - 1
     * @param number 添加的数据,为 int类型
     * @return 添加成功返回 true ,失败返回 false
     */
    public static boolean add(int[] arr, int index, int number) {
        // 1. 参数合法性判断
        if (null == arr || arr.length == 0 || index < 0 || index > arr.length - 1) {
            System.out.println("Input parameter is invalid!");
            return false;
        }

        // 2. 利用循环移动数组中的元素,从最后一位开始
        for (int i = arr.length - 1; i > index; i--) {
            arr[i] = arr[i - 1];
            /*
            index = 5; arr.length = 10;
            arr[9] = arr[8]; i-- == 8
            arr[8] = arr[7]; i-- == 7
            arr[7] = arr[6]; i-- == 6
            arr[6] = arr[5]; i-- == 5
             */
        }

        arr[index] = number;

        return true;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值