数组
什么是数组?
数组指的是一种容器 可以用来存储同种数据类型的多个值
小结:
数组指的是一种容器 可以用来存储同种数据类型的多个值
//数组容器在存储数据的时候 需要结合隐式转换考虑
//例如 int 类型的数组容器 ( byte short int )
//例如 double类型的数组容器 ( byte short int long float double )
//建议 容器的类型 和存储的数据类型保持一致
数组的定义:
@ 格式 1
数据类型 [ ] 数组名
例子: int [] array
@ 格式 2
数据类型 数组名 [ ]
例子: int array [ ]
数组初始化
什么是数组的初始化?
初始化:就是在内存中 为数组容器开辟空间 并将数据存入容器中过程
数组初始化有两种方式: 静态初始化 动态初始化
数组的静态初始化
完整格式:
数据类型 [] 数组名 = new 数据类型[] {元素 1 ,元素 2 ,元素 3 ……};
例子:int [] array = new int [] { 11 , 12 , 13 };
例子:double [] array2 = new double [] { 11.1 , 12.2 , 13.3 };
数组的动态初始化
动态初始化
初始化只指定数组长度 由系统为数组分配初始值
格式:
数据类型 [] 数组名 = new 数据类型 [数组长度];
例子:
int [] arr =new int[3];
小结
静态初始化和动态初始化区别
动态初始化:手动指定数组长度 由系统给出默认初始化值
只明确元素个数 不明确具体数值 推荐使用动态初始化
举例:
使用数组容器来存储键盘录入的五个整数
int [] arr = {? ? ? };
int [] arr = new int[5];
静态初始化:手动指定数组元素 系统会根据元素个数 计算出数组长度
需求中已经明确了要操作的具体数据 直接使用静态初始化即可
例子:
将全班同学成绩存入数组中 11 , 12 , 13
int [] arr = {11 ,12 ,13};
数组的地址值:
地址值是什么?
数组的地址值是表示数组在内存中的位置
int array1[ ] = {11,12,13,14,15};
System.out.println(array1);
//[I@4554617c 地址值
解释一下地址值格式含义:
//[D@4554617c
[ : 表示当前是一个数组
D :表示是 double 类型的 I 表示 int 类型
@ :表示一个间隔符 (固定格式)
4554617c :才是真正的数组值 (十六进制)
索引
索引 索引特点
索引:也叫做下标 角标
索引特点:从 0 开始 逐个 + 1 增长 连续不间断
测试
利用索引对数组中的元素进行访问
1 . 获取数组里面的元素
package com.Test;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
//格式 : 数组名 [索引]
//利用索引对数组中的元素进行访问
//1.获取数组里面的元素
int[] arr = {1,2,3,4,5};
//获取数组中的第一个元素
//其实就是 0 索引上对应的元素
int number = arr[0];
System.out.println(number); //1
//获取1索引上对应的数据,并直接打印出来
System.out.println(arr[1]); //2
}
}
2.把数据存储到数组中
package com.Test;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//格式 : 数据名 [索引] = 具体数据/变量;
//2.把数据存储到数组中
//细节 :数值一旦覆盖 原来的就不存在了
arr[0] =100;
System.out.println(arr[0]);
}
}
数组的遍历
数组的遍历 :将数组中所有的内容取出来 取出来之后可以 (打印,求和,判断…)
注意:遍历指的是取出数据的过程 不要局限理解为遍历就是打印
代码:
package com.Test;
public class Demo01 {
public static void main(String[] args) {
//1.定义一个数组
int[] arr = {1,2,3,4,5};
//2.获取数组里面所有元素
//格式 :数组名称 [索引]
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]);
}
}
优化代码:
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//利用循环改进代码
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
}
}
数组长度
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//在Java中关于数组长度属性, .length
//调用方式 数组名.length
System.out.println(arr.length);
}
}
优化:
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//在Java中关于数组长度属性, .length
//调用方式 数组名.length
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
练习 1
遍历数组并求和
定义一个数组 存储 1 , 2 ,3 ,4 ,5
遍历数组得到每一个元素 求数组里面所有数据和
代码:
package com.Test;
public class Demo01 {
public static void main(String[] args) {
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);
}
}
练习 2
统计个数
定义一个数组 存储 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10
遍历数组得到每一个元素 统计数组里面一共有多少个能被3整除的数
代码:
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] %3==0){
//System.out.println(arr[i]);
count++;
}
}
System.out.println("整数中能被3整除的数有"+count+"个")
}
}
练习 3
变化数据
定义一个数组 存储 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10
遍历数组得到每一个元素
要求:
如果是奇数,则将当前的数字扩大两倍
如果是偶数, 则当前的数字变成二分之一
代码:
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < arr.length; i++) {
if (arr[i]%2==0){
arr[i]=arr[i]/2;
}else{
arr[i]=arr[i]*2;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
数组的常见问题
当访问了数组中不存在的索引 就会引发索引越界异常
数组的常见操作
@ 1 求最值
需求:
已知数组元素为{33 ,5 , 22 , 44 ,55 }
请找出数组最大值并打印在控制台
代码:
最大值
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {33,5,22,44,55};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max) {
max = arr[i];
}
}
System.out.println(max);
}
}
最小值
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {33,5,22,44,55};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i]<max) {
max = arr[i];
}
}
System.out.println(max);
}
}
@ 2 求和
遍历数组求和
需求:
生成 10 个 1 - 100 之间的随机数存入数组
1 求出所有数据的和
2 求出所有数据的平均数
3 统计有多少个数据比平均数小
代码:
package com.Test;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
int[] arr = new int [10];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int number = r.nextInt(100);
arr[i] = number;
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
System.out.println("数组中所有数的和为"+sum);
int avg =sum / arr.length;
System.out.println("数组的平均数为"+avg);
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]<avg){
count++;
}
}
System.out.println("在数组中有"+count+"个数据 比平均数小");
//验证
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
@ 3 交换数据
交换数组中的数据
需求:
定义一个数组 存入 1 ,2 ,3 ,4 ,5 按照要求交换索引对应的元素
交换前 : 1 ,2 ,3 ,4 ,5
交换后 : 5 ,4 ,3 ,2 ,1
代码:
package com.Test;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
for (int i = 0, j = arr.length-1;i<j; i++,j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
@ 4 打乱数据
打乱数组中的数据
需求:
定义一个数组 存储 1 - 5 要求打乱数组中所有数据顺序
代码:
package com.Test;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//循环遍历数组 从 0 开始打乱顺序
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndex = r.nextInt(arr.length);
//拿着随机数组元素进行交换
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print (arr[i] + " ");
}
}
}
数组的内存图
Java内存分配
栈 : 方法运行时使用的内存 比如 main 方法运行 进入方法栈中实行
堆 : 存储对象或者数组 new 来创建 都存储在堆内存
方法区 : 存储可以运行的 class 文件
本地方法栈 :JVM 在使用操作系统功能的使用 和我们开发无关
寄存器 :给本地 CPU 使用 和我们开发无关
标签:初始化,arr,遍历,Java,int,System,数组,public,out From: https://blog.csdn.net/Alacan/article/details/139619514