超市
浪味仙 奥利奥 麦丽素
图书馆
书籍的存放,会按照归纳总结的思想来存放
T 社科类书籍
T-235 《电路》 235 表示这是目前图书馆中社科类书籍的235号
T-235-01 ~ 10 表示有10本《电路》每一本都有一个独立的编号,并且是一个独立的个体
总结:
1. 这本书有一个唯一标示 T-235
2. 这十本书是存放在书架的同一个位置,占据同一个空间
3. 每一本数有一个独立的编号,区分独立的个体
在代码中会出现对于变量需求量很大的情况,那么这里需要采用一些统一的方式,如果使用的是最原始的单一变量操作,会导致以下一些问题
1. 代码过于臃肿!!!
2. 代码阅读性极差!!!
3. 代码维护性极差!!!
4. 代码操作性极差!!!
比葫芦画瓢,参考一些生活实例
1. 给这些数据起一个统一的名字
2. 存放到同一个内存位置
3. 每一个数据都有一个独立的编号
// 格式
数据类型[] 数组名 = new 数据类型[容量]; // capacity
赋值号左侧
数据类型:
告知编译器当前数组中能够保存的数据类型是要求哪一个类型,而且有且只能是当前指定的数据类型,
其他类型都无法保存,这是标准【数据类型一致化】
[]:
1. 表示这里定义的是一个数组
2. 表示数组名是一个【引用数据类型】的【变量】
数组名:
1. 操作数据非常重要的一个名字
2. 数组名是一个【引用数据类型】的【变量】
赋值号右侧:
new:
创建数组使用内存空间的关键字,存在 new 就一定存在内存【堆区】的使用
数据类型:
前后呼应,要求和赋值号左侧完全一致,告知编译器,数组能够保存的数据类型到底是什么类型
[容量]:
告知编译器,当前数组中能够保存的元素最多是多少个,并且创建定义之后,数组容量不可以改
变!!!
数组中的核心数据
有效下标!!!
有效下标的范围是从 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]);
}
}
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]);
}
}
}
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]);
}
}
}
/*
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];
}