Java基础 :Day05-数组

数组

文章目录

    • 数组
        • 1. 生活中的数组
        • 2. 代码中对于数组的需求
        • 3. Java中定义数组的格式
        • 4. 在代码中使用数组
        • 5. 数组内存分析图
        • 6. 数组和for循环不得不说的默契
        • 7. 数组和方法不得不说的规范
        • 8. 数组使用案例

1. 生活中的数组

超市
	浪味仙 奥利奥 麦丽素

图书馆
	书籍的存放,会按照归纳总结的思想来存放
	T 社科类书籍
	T-235 《电路》 235 表示这是目前图书馆中社科类书籍的235号
	T-235-01 ~ 10 表示有10本《电路》每一本都有一个独立的编号,并且是一个独立的个体

总结:
	1. 这本书有一个唯一标示 T-235
	2. 这十本书是存放在书架的同一个位置,占据同一个空间
	3. 每一本数有一个独立的编号,区分独立的个体

2. 代码中对于数组的需求

	在代码中会出现对于变量需求量很大的情况,那么这里需要采用一些统一的方式,如果使用的是最原始的单一变量操作,会导致以下一些问题
	1. 代码过于臃肿!!!
	2. 代码阅读性极差!!!
	3. 代码维护性极差!!!
	4. 代码操作性极差!!!

比葫芦画瓢,参考一些生活实例
	1. 给这些数据起一个统一的名字
	2. 存放到同一个内存位置
	3. 每一个数据都有一个独立的编号

3. Java中定义数组的格式

// 格式
数据类型[] 数组名 = new 数据类型[容量]; // capacity

赋值号左侧
	数据类型:
		告知编译器当前数组中能够保存的数据类型是要求哪一个类型,而且有且只能是当前指定的数据类型,
		其他类型都无法保存,这是标准【数据类型一致化】
	[]:
		1. 表示这里定义的是一个数组
		2. 表示数组名是一个【引用数据类型】的【变量】
	数组名:
		1. 操作数据非常重要的一个名字
		2. 数组名是一个【引用数据类型】的【变量】

赋值号右侧:
	new:
		创建数组使用内存空间的关键字,存在 new 就一定存在内存【堆区】的使用
	数据类型:
		前后呼应,要求和赋值号左侧完全一致,告知编译器,数组能够保存的数据类型到底是什么类型
	[容量]:
		告知编译器,当前数组中能够保存的元素最多是多少个,并且创建定义之后,数组容量不可以改
		变!!!

4. 在代码中使用数组

数组中的核心数据
	有效下标!!!
	有效下标的范围是从 0 开始,到数组的容量 - 1
	如果数组的容量为10,有效下标范围是 0 ~ 9。
	并且数组的下标范围没有负数!!!超出有效下标范围,就是数组越界操作!!!
	
	ArrayIndexOutOfBoundsException 数组下标越界异常
class Demo2 {
	public static void main(String[] args) {
		/*
		数据类型[] 数组名 = new 数据类型[容量];
		创建一个int类型数组
		这里创建的是一个可以最多可以保存10个int类型数据的一个数组
		数组名叫做array
		*/
		int[] array = new int[10];
		
		/*
		操作指定下标的元素,需要的格式是
			数组名[有效元素]
		*/
		array[0] = 10;
		array[5] = 20;
		
		// array[10] = 100; java.lang.ArrayIndexOutOfBoundsException: 10
		// array[-1] = 10; java.lang.ArrayIndexOutOfBoundsException: -1
		System.out.println("array[0] = " + array[0]);
		System.out.println("array[5] = " + array[5]);
	}
}

5. 数组内存分析图

Java基础 :Day05-数组_第1张图片

6. 数组和for循环不得不说的默契

for (循环条件初始化; 循环条件判断; 循环条件变更) {
    循环体;
}

数组中有一个非常重要的数据,有效下标范围!!!
class Demo3 {
	public static void main(String[] args) {
		// 定义一个int类型的数组,容量为10
		int[] arr = new int[10];
		
		/*
		利用for循环遍历数组
		arr.length 获取当前数值的容量 Capacity
		*/
		for (int i = 0; i < arr.length; i++) {
			// 给数组中每一个元素赋值对应
			arr[i] = i + 1;
		}
		
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
}

7. 数组和方法不得不说的规范

class Demo4 {
	public static void main(String[] args) {
		// 定义一个int类型的数组,容量为10
		int[] arr = new int[10];
		
		// 调用方法,需要的参数是数组类型,这里传入数组名即可!!!
		setIntArray(arr);
		printIntArray(arr);
	}
	
	/*
	需求
		给int类型数组赋值内容
	方法分析:
		public static 不要问
		返回值类型:
			void类型,不需要返回值
		方法名:
			setIntArray 
		形式参数列表:
			int[] array int类型数组作为方法从参数
		方法声明:
			public static void setIntArray(int[] array)
	*/
	/**
	* 给予一个int类型数组赋值操作
	*
	* @param array int类型数组
	*/
	public static void setIntArray(int[] array) {
		for (int i = 0; i < array.length; i++) {
			// 给数组中每一个元素赋值对应
			array[i] = i + 1;
		}
	}
	
	/*
	需求:
		展示一个int类型数组中的元素内容
	方法分析:
		public static 不要问
		返回值类型:
			void
		方法名:
			printIntArray
		形式参数列表:
			int[] array int类型数组作为方法的参数
		方法声明:
			public static void printIntArray(int[] array)		
	*/
	/**
	* 展示一个int类型数组中的元素内容
	*
	* @param array 需要展示的int类型数组
	*/
	public static void printIntArray(int[] array) {
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}
}

8. 数组使用案例

/*
1. 在一个int类型数组中,找出最大值所在下标位置
需求:
	int类型数组中,找出最大值的下标位置
方法分析:
	public static 不要问
	返回值类型:
		这里需要返回找到的最大值下标位置,而数组的有效下标位置范围是在int范围以内,int类型作为返
		回值
	方法名:
		findMaxIndex
	形式参数列表:
		功能是在一个int类型数中找出对应的最大值下标,这里需要一个int类型数组
		int[] array
	方法声明:
		public static int findMaxIndex(int[] array)
*/
/**
* 找出int类型数组中最大值的下标位置
* 
* @param array int类型数组
* @return 返回最大值的下标位置
*/
public static int findMaxIndex(int[] array) {
    // 拿出数组中下标为0的元素所在参照物
    int maxIndex = 0;
    
    // 使用for循环遍历数组,再加上if判断,比较数组中元素的大小
    for (int i = 1; i < array.length; i++) {
        /* 
         使用if判断,如果发现maxIndex下标对应的数据,小于i下标的数据,
         保存对应的i值
         */
        if (array[maxIndex] < array[i]) {
            maxIndex = i;
        }
    }
    
    // 使用return关键字,返回maxIndex
    return maxIndex;
}
/*
2. 在一个int类型数组中,找出最小值所在下标位置
需求:
	找出int类型数组中最小值下标位置
方法分析:
	public static 不要问
	返回值类型:
		找出的数据是数组中的下标,而数组的有效下标范围是int类型,int类型
	方法名:
		findMinIndex
	形式参数列表:
		int类型的数组
		int[] array
	方法声明:
		public static int findMinIndex(int[] array)
*/
/**
* 找出int类型数组中最小值的下标位置
* 
* @param array int类型的数组
* @return 返回值大于等于0,表示最小值的下标位置,如果返回-1 表示方法运行失败,参数不合法!!
*/
public static int findMinIndex(int[] array) {
    /* 
    参数合法性判断
    如果传入的数组满足以下条件,证明当前方法是无法正常运行
    null == array 见多你就习惯了~
    array.length 数组容量为0,运行该方法没有意义
    */
    if (null == array || array.length == 0) {
        System.out.println("Input parameter is invalid!传入参数不合法!!!");
        // 终止方法运行
        // 返回值要求int类型,这里返回任何一个大于等于0都是不合理的,有可能是合法下标范围
        // 以内,唯一能够确定的非法下标,同时也可以告知方法外运行失败的数据就是负数下标
        // -1通常都是数组操作中首选的一个非法下标
        return -1; 
    }
    int minIndex = 0;
    
    for (int i = 1; i < array.length; i++) {
        if (array[minIndex] > array[i]) {
            minIndex = i;
        }
    }
    
    return minIndex;
}
/*
3. 找出指定元素在int类型数组中的下标位置,找到返回值大于等于0 ,没有找到返回-1
需求:
	找出数组中指定元素的下标
方法分析:
	public static 不要问
	返回值类型:
		返回值是在有效下标范围以内,所以为int类型
		int
	方法名:
		indexOf index 下标 of 谁的
	形式参数列表:
		1. 指定的数组,int类型的数组 int[] array
		2. 指定的查询元素 int find
		(int[] array, int find)
	方法声明:
		public static int indexOf(int[] array, int find)
*/
/**
* 找出数组中指定元素的下标位置,找到返回值大于等于0,没有找到返回-1
* 
* @param array 查询数据的int类型数组
* @param find 指定查询的数据
* @return 找到对应的元素,返回值大于等于0,没有找到返回-1
*/
public static int indexOf(int[] array, int find) {
    // 参数合法性判断
    if (null == array || array.length == 0) {
        System.out.println("传入参数不合法!!! Input Parameter is Invalid!!!");
        // 参数不符合要求,结束当前方法运行,返回-1
        return -1;
    }
    
    /*
    保存下标的变量,初始化为-1。假定当前指定的元素不存在
    */
    int index = -1;
    /*
    1 3 5 7 9 find 6
    index = -1
    */
    /* 利用循环遍历整个数组 */
    for (int i = 0; i < array.length; i++) {
        /* 如果发现了对应的数组,保存下标i 到index中,同时跳出循环 */
        if (find == array[i]) {
            index = i;
            break;
        }
    }
    
    return index;
}
/*
4. 使用0替换int类型数组中的指定元素
需求:
	使用指定元素,替换指定内容
方法分析:
	public static 不要问
	返回值类型:
		boolean 作为方法的运行状态监视,返回true表示运行成功,false表示失败
	方法名:
		replace 替换
	形式参数列表:
		1. 替换数据的数组 int[] arr
		2. 指定替换的数据 int num
		(int[] arr, int num)
	public static boolean replace(int[] arr, int num)
*/
/**
* 在指定数组中,使用0,替换掉指定的元素
* 
* @param arr 替换数据的数组
* @param num 指定替换的内容
* @return 方法运行成功返回true, 失败返回false
*/
public static boolean replace(int[] arr, int num) {
    // 参数合法性判断
    if (null == arr || arr.length == 0) {
        System.out.println("Input Parameter is Invalid!!!");
        return false;
    }
    
    // 利用循环遍历数组,找出对应的数据,使用0 赋值操作即可
    for (int i = 0; i < arr.length; i++) {
        if (num == arr[i]) {
            arr[i] = 0;
        }
    }
    
    return true;
}
/*
5. 从键盘上获取数据保存到int类型数组中
需求:
	从键盘上要求用户输入数据,保存到int类型数组中

方法分析:
	public static 不要问
	返回值类型:
		boolean 需要对传入的数组进行判断,方法运行OK 返回true,否则 false
	方法名:
		getNumberFromStdin
	形式参数列表:
		这里只需要一个int类型的数组
		(int[] array)
	方法声明:
		public static boolean getNumberFromStdin(int[] array)
*/
/**
* 从键盘上获取int类型数据,保存到指定的int类型数组中
*
* @param array 指定的int类型数组
* @return 方法运行成功返回true, 失败返回false
*/
public static boolean getNumberFromStdin(int[] array) {
    // 参数合法性判断
    if (null == array || array.length == 0) {
        System.out.println("Input Parameter is Invalid!");
        return false;
    }
    
    // 提供一个扫描器
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入" + array.length + "个数据:");
    for (int i = 0; i < array.length; i++) {
        array[i] = sc.nextInt();
    }
    
    return true;
}
/*
6. 在int类型数组中,找出指定下标的元素。需要考虑参数合法性问题
需求:
	一个数组,给我一个下标,我还你一个世界
方法分析:
	public static 不要问
	返回值类型:
		这里操作的是一个int类型数组,并且获取的数据也是当前数组中的内容,那就是
		int类型
	方法名:
		get √
	形式参数列表:
		1. int类型数组
		2. 指定的下标位置
		(int[] array, int index);
	方法声明:
		public static int get(int[] array, int index)
*/
/**
* 在一个正数int类型数组中,找出指定下标的元素
*
* @param array int类型数组
* @param index 指定的下标位置
* @return 返回值是找到的对应元素,结果大于0,表示正常,如果是-1,表示参数存在问题
*/
public static int get(int[] array, int index) {
    // 参数合法性判断
    if (null == array || array.length == 0 
        || index < 0 || index > arr.length - 1) {
        System.out.println("Input Parameter is Invalid!");
        // 这里返回-1,表示参数不合法!!!
        return -1; 
    }
    
    return array[index];
}
* 在一个正数int类型数组中,找出指定下标的元素
*
* @param array int类型数组
* @param index 指定的下标位置
* @return 返回值是找到的对应元素,结果大于0,表示正常,如果是-1,表示参数存在问题
*/
public static int get(int[] array, int index) {
    // 参数合法性判断
    if (null == array || array.length == 0 
        || index < 0 || index > arr.length - 1) {
        System.out.println("Input Parameter is Invalid!");
        // 这里返回-1,表示参数不合法!!!
        return -1; 
    }
    
    return array[index];
}























你可能感兴趣的:(#,java基础)