2. 数组(接2024/2/1笔记)
2.4 数组遍历
package com.angus.array.arrayTraversal_4;
public class note {
public static void main(String[] args) {
//数组遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断...)
//注意:遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印!
System.out.println("^^");
}
}
package com.angus.array.arrayTraversal_4;
public class demo1 {
public static void main(String[] args) {
//在Java当中,关于数组的一个长度属性,length
//调用方式:数组名.length
//扩展:
//自动的快速生成数组的遍历方式
//idea提供的
//数组名.fori
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("^^");
}
}
package com.angus.array.arrayTraversal_4;
public class test1 {
public static void main(String[] args) {
/*定义一个数组,存储1,2,3,4,5
遍历数组得到每一个元素,求数组里面所有的数据和*/
int[] arr = {1,2,3,4,5};
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
System.out.println(sum);
System.out.println("^^");
}
}
package com.angus.array.arrayTraversal_4;
public class test2 {
public static void main(String[] args) {
/*定义一个数组,存储1,2,3,4,5,6,7,8,9,10
遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字*/
//分析:
//4.定义count来接收个数
int count = 0;
//1.定义一个数组
int[] arr = {1,2,3,4,5,6,7,8,9,10};
//2.遍历数组得到每一个元素
for (int i = 0; i < arr.length; i++) {
//3.统计数组里面一共有多少个能被3整除的数字
if (arr[i] % 3 ==0) {
count++;
}
}
System.out.println(count);
System.out.println("^^");
}
}
package com.angus.array.arrayTraversal_4;
public class test3 {
public static void main(String[] args) {
/* 定义一个数组,存储1,2,3,4,5,6,7,8,9,10
遍历数组得到每一个元素。
要求:
1,如果是奇数,则将当前数字扩大两倍
2,如果是偶数,则将当前数字变成二分之一*/
//分析
//1.定义一个数组,存储1,2,3,4,5,6,7,8,9,10
int[] arr={1,2,3,4,5,6,7,8,9,10};
//2.遍历数组得到每一个元素
for (int i = 0; i < arr.length; i++) {
//3. 要求:
// 1,如果是奇数,则将当前数字扩大两倍
// 2,如果是偶数,则将当前数字变成二分之一*/
if (arr[i] % 2 == 0){
arr[i] = arr[i] / 2;
} else {
arr[i] = arr[i] * 2;
}
}
//建议一个循环只做一件事
//4.遍历数组得到每一个新元素
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("^^");
}
}
2.5 数组动态初始化
package com.angus.array.arrayAreInitializedDynamically_5;
public class note {
public static void main(String[] args) {
//知识点一
//数组动态初始化
//动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
//格式: 数据类型[] 数组名 = new 数据类型[数组长度];
//例子: int[] arr = new int[3];
//知识点二
//数组动态初始化和静态初始化的区别
//动态初始化:手动指定数组的长度,由系统给出默认初始化值
//只明确元素的个数,不明确具体数值,推荐使用动态初始化
//例子:键盘录入5个数
//int[] arr = new int[5];
//int[] arr = {? ? ? ? ?}; 静态初始化无法执行
//静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度
//需求中已经明确了要操作的具体数据,直接静态初始化即可
//举例:将学生成绩录入数组中 85 74 99
//int[] arr = {85, 74, 99};
//总结:知道确切的值就用静态,不知道确切的值就用动态
System.out.println("^^");
}
}
package com.angus.array.arrayAreInitializedDynamically_5;
public class demo1 {
public static void main(String[] args) {
/* 定义一个数组,用来存班级中50个学生的姓名
姓名未知,等学生报道之后,再进行添加。*/
//分析
//1.定义一个数组,用来存班级中50个学生的姓名
String arr[] = new String[50];
//2.姓名未知,等学生报道之后,再进行添加
arr[0] = "adada";
arr[1] = "ada313";
arr[2] = "阿达阿达";
arr[3] = "a65大大";
arr[4] = "ad阿达瓦多无561";
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[5]);//引用数据类型:默认初始化值 null
//数组默认初始化值的规律
//整数类型:默认初始化值0
//小数类型:默认初始化值0.0
//字符类型:默认初始化值'\u0000' 空格
//布尔类型:默认初始化值 false
//引用数据类型:默认初始化值 null
int[] arr2 = new int[3];
System.out.println(arr2[0]);//0
System.out.println(arr2[1]);//0
System.out.println(arr2[2]);//0
System.out.println("^^");
}
}
2.6 数组内存图
package com.angus.array.arrayMemoryGraph_6;
public class note {
public static void main(String[] args) {
//数组内存图
//靠理解图
//随笔
//方法就进入栈内存 -> 方法在里面不断开辟空间执行代码,执行完毕后就滚出去了
//new出来的东西就进入堆内存 -> 每个new出来的东西都在里面有一个独立开辟出来的空间,所以要想找到它们就找对应的地址值
//栈内存和堆内存就是通过地址值来相互联系的,通过=赋值运算符将地址值赋值给数组名,栈内存就通过数组名去堆内存找对应的空间,地址值有点像是房牌号,数组名就像是刻着对应房牌号的钥匙(也可以说是房卡)
//Java内存分配
//栈
//方法运行时使用的内存,比如main方法运行,进入方法栈中执行 -> 目前还没学方法,但我们现在其实一直在使用main方法
//堆
//存储对象或者数组,new来创建的东西,都存储在堆内存 -> 目前只学了数组
//方法区 -> 从JDK8开始,被拆分了,分的功能有些给新创造出来的元空间,有些给堆
//存储可以运行的class文件 -> 字节码文件就是class文件
//本地方法栈
//JVM在使用操作系统功能的时候使用,和我们开发无关
//寄存器
//给CPU使用,和我们开发无关
System.out.println("^^");
}
}
2.7 数组常见问题
package com.angus.array.commonQuestionsQfArray_7;
public class note {
public static void main(String[] args) {
//数组常见问题
//当访问了数组中不存在的索引,就会引发索引越界异常
System.out.println("^^");
}
}
package com.angus.array.commonQuestionsQfArray_7;
public class demo1 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {1,2,3,4,5};
//长度:5
//最小索引:0
//最大索引:4(数组的长度 - 1)
System.out.println(arr[2]);
//小结:
//索引越界异常
//原因:访问了不存在的索引
//避免:知道索引的范围
//最小索引:0
//最大索引:(数组的长度 - 1)
System.out.println("^^");
}
}
2.8 数组常见操作
package com.angus.array.commonOperationsOfArray_8;
public class note {
public static void main(String[] args) {
//数组常见操作
//求最值
//求和
//交换数据
//打乱数据
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
public class test1 {
public static void main(String[] args) {
//定义数组求最大值:33,5,22,44,55
//边写就边分析了
//1.定义
int[] arr = {33,5,22,44,55};
//4.定义一个初始最大值
int max = arr[0];
//2.遍历
for (int i = 1; i < arr.length; i++) { //i从1开始是为了减少一次跟自己的比较,提升效率
//3.求最大值
if (arr[i] > max) {
max = arr[i];
}
}
//5.输出最大值
System.out.println(max);
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
import java.util.Random;
public class test2 {
public static void main(String[] args) {
//随笔
//在动态初始化中或者静态初始化中
//添加数据值给数组的某个元素类似于将数据值赋值给一个新的变量
//println->print 就不会换行了,记得数据与数据之间加个空格间隔开
//题目
/*需求:生成10个1~100之间的随机数存入数组。
1)求出所有数据的和
2)求所有数据的平均数
3)统计有多少个数据比平均值小*/
//6.求出所有数据的和
int sum = 0;
//1.数组,随机数
int[] arr= new int[10];
//3.1~100生成10个
for (int i = 0; i < arr.length; i++) {
//2.1~100之间的随机数
Random random = new Random();
int suiJiShu = random.nextInt(100)+1;//范围的求法: 1.100-1=99 2.99+1=100 3.100的随机数范围 4.100的随机数范围+1
//4.把随机数赋值给数组中的元素
arr[i] = suiJiShu;
//5.打印十个随机数 -> 把它们放在一行 -> println->print -> 记得数据与数据之间加个空格间隔开
System.out.print(arr[i] + " ");
//6.求出所有数据的和
sum = sum + arr[i];
}
//12.分行
System.out.println("");
//7.打印所有数据的和 -> 一个循环只做一件事
System.out.println("所有数据的和为:" + sum);
//8.求所有数据的平均数
int avg = sum / arr.length;
//9.打印所有数据的平均数
System.out.println("所有数据的平均数为:" + avg);
//10.统计有多少个数据比平均值小
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] < avg) {
count++;
}
}
//11.打印统计的个数
System.out.println("有" + count + "个数据比平均值小");
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
public class test3 {
public static void main(String[] args) {
/*需求:定义两个变量,交换两个变量记录的值*/
int a = 1;
int b = 2;
int temp = a;
temp = a;
a = b;
b = temp;
System.out.println(a);
System.out.println(b);
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
public class test4 {
public static void main(String[] args) {
/*需求:定义一个数组,将数组中0索引和最大索引出的值进行交换*/
int arr[] = {1,2,3,4,5};
int temp = arr[0];
arr[0] = arr[4];
arr[4] = temp;
System.out.println(arr[0]);
System.out.println(arr[4]);
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
public class test5 {
public static void main(String[] args) {
/*需求:定义一个数组,存入1,2,3,4,5。
交换首尾索引对应的元素。
交换前:1,2,3,4,5
交换后:5,4,3,2,1*/
//1.定义
int arr[] = {1,2,3,4,5};
//3.依次交换用循环
for (int i = 0, j = arr.length - 1; i < j; i++ , j--) { //注意:这是直接交换,不是比谁大谁小才换
//2.交换首尾索引对应的元素
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//4.依次打印换好的元素也用循环
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("^^");
}
}
package com.angus.array.commonOperationsOfArray_8;
import java.util.Random;
public class test6 {
public static void main(String[] args) {
//需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。
//难点
//如何获取一个随机索引
// int arr[] = {1,2,3,4,5};
// Random random = new Random();
// int ran = random.nextInt(arr.length); //->这里要注意:因为我们现在获取的是所有的元素,所以直接写 数据类型.length ,如果规定是从第几个元素到第几个元素或者是从哪个索引到哪个索引,就还是要用以前的方法步骤找出规定的范围
// System.out.println(ran);
//1.定义一个数组,存入1~5
int arr[] = {1,2,3,4,5};
//2.遍历数组
for (int i = 0; i < arr.length; i++) {
//3.获取一个随机索引
Random random = new Random();
int ran = random.nextInt(arr.length);
//4.依次交换
int temp = arr[i];
arr[i] = arr[ran]; //->这里要注意是arr[ran],要做的是交换,而不是赋值
arr[ran] = temp;
}
//5.依次打印
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("");
System.out.println("^^");
}
}