黑马程序员技术交流社区
标题: 【石家庄校区】练习题整理 [打印本页]
作者: 1597854328 时间: 2019-3-7 20:19
标题: 【石家庄校区】练习题整理
[AppleScript] 纯文本查看 复制代码
public class Demo02ArrayTwo {
public static void main(String[] args) {
// 创建第一个数组
int[] arrayA = new int[3];
System.out.println(arrayA); //
System.out.println(arrayA[0]); //
System.out.println(arrayA[1]); //
System.out.println(arrayA[2]); //
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); //
System.out.println(arrayA[0]); //
System.out.println(arrayA[1]); //
System.out.println(arrayA[2]); //
System.out.println("==============");
// 创建第二个数组
int[] arrayB = new int[3];
System.out.println(arrayB); //
System.out.println(arrayB[0]); //
System.out.println(arrayB[1]); //
System.out.println(arrayB[2]); //
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); //
System.out.println(arrayB[0]); //
System.out.println(arrayB[1]); //
System.out.println(arrayB[2]); //
}
}
两个引用指向同一个数组的内存图
[Java] 纯文本查看 复制代码
public class Demo03ArraySame {
public static void main(String[] args) {
// 创建一个数组
int[] arrayA = new int[3];
System.out.println(arrayA); //
System.out.println(arrayA[0]); //
System.out.println(arrayA[1]); //
System.out.println(arrayA[2]); //
System.out.println("==============");
arrayA[1] = 10;
arrayA[2] = 20;
System.out.println(arrayA); //
System.out.println(arrayA[0]); //
System.out.println(arrayA[1]); //
System.out.println(arrayA[2]); //
System.out.println("==============");
// 将arrayA数组的地址值,赋值给arrayB数组
int[] arrayB = arrayA; //
System.out.println(arrayB); //
System.out.println(arrayB[0]); //
System.out.println(arrayB[1]); //
System.out.println(arrayB[2]); //
System.out.println("==============");
arrayB[1] = 100;
arrayB[2] = 200;
System.out.println(arrayB); //
System.out.println(arrayB[0]); //
System.out.println(arrayB[1]); //
System.out.println(arrayB[2]); //
}
}
补充: 内存就类似于Excel中的表格, 划分为不同的单元格, 一个格子个地址
变量就是一个单元格, 可以存一个数据.
数组就是连续的多个格子
数组索引为什么设计为从0开始?
数组对象的地址值, 其实就是数组中存放第一个元素的内存地址值
数组中的元素是连续的内存空间
数组中的索引, 其实就是相对于第一个元素地址值的"偏移量"
找到数组中的其他元素, 是通过 "第一个元素地址值 + 偏移量" 找到的
arr[0] 就是 0xF5 + 0 = 0xF5
arr[1] 就是 0xF5 + 1 = 0xF6
arr[2] 就是 0xF5 + 2 = 0xF7
数组的异常和练习常见问题: 数组索引越界异常ArrayIndexOutOfBoundsException: 数组索引越界异常
发生原因: 访问了不存在的索引
解决方法: 不要访问不存在的索引
补充:
异常发生的线程 异常的类型 异常发生的说明___________/\____________ ________________/\______________________ _______/\_________Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at cn.itcast.day05.demo03.Demo01ArrayIndex.main(Demo01ArrayIndex.java:15) ----------------------------------------------- ------------------------ 异常发生的所在包, 类, 方法 异常发生所在的文件及行号 异常是一种安全消息机制, 可以帮助开发者快速定位错误看到异常不要慌, 从上往下找到自己包名的一行, 点击文件行号, 就可以跳转到发生异常的代码根据异常的类型和说明来判断出错的原因, 并修改代码
常见问题: 空指针异常
NullPointerException: 空指针异常
发生原因:
数组变量值为null时, 使用数组变量操作索引就会发生
对象变量值为null时, 使用对象变量调用方法就会发生
解决方法:
可以提前判断数组变量或对象是否为null, 不为null再操作
[Java] 纯文本查看 复制代码
// 数组变量值为null
int[] arr = null;
System.out.println(arr[0]); // NullPointerException
arr[0] = 10; // NullPointerException
// 解决方式:
if (arr != null) {
System.out.println(arr[0]);
arr[0] = 10;
}int[] arr = new int[5];
int a = arr.length;
System.out.println(a); // 长度是?
// new int[5]索引为: 0 1 2 3 4, 最大索引为4, 即长度-1
数组的遍历输出
遍历: 依次获取数组的所有元素值
获取数组的长度
数组的长度: 数组中元素的个数
注意: 数组一旦创建, 长度不可改变
数组长度和最大索引的关系: 最大索引 = 数组长度 - 1
int[] arr = {1,2,3,4,5};
// for循环方式
for (int i = 0; i < arr.length; i++) {
System.out.println(arr);
}
IDEA快捷键:
数组名.fori
5分钟练习: 遍历数组
需求: 定义int数组, 元素为1,2,3,4,5. 使用for循环遍历并打印元素
代码:
需求: 定义int数组, 元素为1,2,3,4,5. 使用for循环遍历并打印元素
[Java] 纯文本查看 复制代码
*/
public class Test {
public static void main(String[] args) {
// 定义数组, 知道元素, 所以使用静态初始化
int[] arr = {1,2,3,4,5};
// for循环遍历 数组名.fori
for (int i = 0; i < arr.length; i++) {
System.out.println(arr);
}
}
}
求出数组中的最值**编程思维: 求最大值**
i[AppleScript] 纯文本查看 复制代码
nt[] arr = {5, 15, 30, 20, 10000};
// 定义变量保存最大值, 先用第一个元素作为参照物
int max = arr[0];
// 遍历获取其他元素比较
for (int i = 1; i < arr.length; i++) {
// 取出每个元素, 与最大值比较
if (arr > max) {
// 如果取出的元素比当前最大值更大, 则将其存入max变量
max = arr;
}
}
// for循环结束后, max中保存的就是最大值
System.our.println(max); // 10000
*
**编程思维: 求最小值*
int[] arr = {5, 15, 30, 20, 10000};
// 定义变量保存最小值, 先用第一个元素作为参照物
int min = arr[0];
// 遍历获取其他元素比较
for (int i = 1; i < arr.length; i++) {
// 取出每个元素, 与最小值比较
if (arr < min) {
// 如果取出的元素比当前最小值更小, 则将其存入min变量
min = arr;
}
}
// for循环结束后, min中保存的就是最大值
System.our.println(min); // 5
5分钟练习需求: 定义数组{5, 15, 30, 20, 10000}, 分别求数组中的最大值和最小值
/*
[AppleScript] 纯文本查看 复制代码
需求: 定义数组{5, 15, 30, 20, 10000}, 分别求数组中的最大值和最小值
*/
public class Test {
public static void main(String[] args) {
int[] arr = {5, 15, 30, 20, 10000};
// 获取最大值
int max = arr[0];
// 遍历数组, 获取其他元素进行比较
for (int i = 1; i < arr.length; i++) {
// 获取一个元素, 与当前max进行比较
if (arr > max) {
// 如果当前元素比max还要大, 则将当前值存入max作为最大值
max = arr;
}
}
// for循环结束后, max中保存的就是最大值
System.out.println("最大值:" + max); // 10000
// 获取最小值
int min = arr[0];
// 遍历数组, 获取其他元素进行比较
for (int i = 1; i < arr.length; i++) {
// 获取一个元素, 与当前min进行比较
if (arr < min) {
// 如果当前元素比min还要小, 则将当前值存入min作为最小值
min = arr;
}
}
// for循环结束后, min中保存的就是最小值
System.out.println("最小值:" + min); // 5
}
}
数组元素反转编程思维: 数组元素反转 (在原数组中交换元素)
[AppleScript] 纯文本查看 复制代码
int[] arr = {10, 20, 30, 40, 50};
// 遍历数组, 定义最小索引和最大索引
for (int min = 0, max = arr.length - 1; min < max; min++, max--) {
// 定义第三个变量用于交换元素值
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
5分钟练习:需求: 定义数组{10, 20, 30, 40, 50}, 将元素反转
代码:
[
需求: 定义数组{10, 20, 30, 40, 50}, 将元素反转
*[AppleScript] 纯文本查看 复制代码
/
public class Test {
public static void main(String[] args) {
// 定义数组
int[] arr = {10, 20, 30, 40, 50};
// 反转数组
for (int min = 0, max = arr.length - 1; min < max; min++, max--) {
// 首尾元素交换
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
// 打印交换完的数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr);
}
}
}
数组作为方法参数: 传递地址
//结论: 数组作为参数传递, 实际传递的是数组对象的地址值
p
数组作为方法返回值: 返回地址[AppleScript] 纯文本查看 复制代码
public class Demo01ArrayParam {
public static void main(String[] args) {
int[] array = { 10, 20, 30, 40, 50 }; // 0x666
printArray(array); // 0x666
}
// 打印数组元素
public static void printArray(int[] array) { // 相当于 int[] array = 0x666
for (int i = 0; i < array.length; i++) {
System.out.println(array);
}
}
}
//结论: 数组作为返回值, 实际返回的是数组对象的地址值
[AppleScript] 纯文本查看 复制代码
public class Demo02ArrayReturn {
public static void main(String[] args) {
int[] result = calculate(10, 20, 30); // 返回的是地址值 0x666
System.out.println("总和:" + result[0]);
System.out.println("平均数:" + result[1]);
}
public static int[] calculate(int a, int b, int c) {
int sum = a + b + c; // 总和
int avg = sum / 3; // 平均数
// 需要一个数组,也就是一个塑料兜,数组可以保存多个结果
int[] array = { sum, avg }; // 0x666
return array; // 0x666
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |