自学内容网 自学内容网

5.Java入门笔记--数组

数组就是一个容器,用来存储一批同种类型的数据。

1.静态初始化数组

定义数组的时候直接给数组赋值。

静态初始化数组的格式:

//完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int [] ages = new int[]{12,24,36}
double[] scores = new double[]{89.9,99.5,59.5,88.0};
//简化格式
数据类型[] 数组名 = {元素1,元素2,元素3....};
itn [] ages = {12,24,36};

注意:

  • 数据类型[ ] 数组名 = 数据类型 数组名[ ]
  • 什么类型的数组只能存放什么类型的数据
package item6;

import java.util.Random;

public class Array1 {
public static void main(String[] args) {
//数组的应用:掌握数组的定义方式一:静态初始化数组
 //1.数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3....}
int[] ages = new int[] {12,24,36};//存储三个数组的年龄

double[] scores = new double[] {89.9,99.5,59.5,88};

//2.简化写法
//数据类型[] 数组名 ={元素1,元素2,元素3....}
int[] ages2 = {12,15,52};

double[] scores2 = {89.9,99.5,88};

//3.数据类型[ ] 数组名 = 数据类型 数组名[ ]
int age3[] = {22,58,54};
}
}

注意:数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型

1.1.数值的访问

数组名[索引]

//取值
System.out.println(arr[0]);
//赋值
arr[2] = 100;
System.out.println(arr[2]);//100

数组的长度属性:length

//获取数组的长度(就是数组元素的个数)
System.out.println(arr.length);//3

1.2.数组的遍历

就是一个一个数据的访问。

package item6;

import java.util.Random;

public class Array1 {
public static void main(String[] args) {
int[] ages4 = {12,24,36};
//System.out.println(ages4[0]);
//System.out.println(ages4[1]);
//System.out.println(ages4[2]);

for(int i = 0;i < 3;i++) {
System.out.println(ages4[i]);
}

}
}

求和案例

需求:某部门5名员工的销售额分别是:16、26、36、6、30。

分析:

  1. 把这五个数据拿到程序中去--->使用数组
  2. 遍历数组中的每个数据,然后在外面定义求和变量把它们累加起来。
package item7;

public class ArrayTest4 {
public static void main(String[] args) {
//目标:完成对数组的元素求和
//1、定义一个数组存储5名员工的销售额
int[] money = {16,26,36,6,100};

//2、遍历这个数组中的每个数据

//3、定义夜歌变量用于累加求和
int sum = 0;
for(int i = 0; i<money.length;i++) {
sum += money[i];

}
System.out.println(sum);
}
}

2.动态初始化数组

定义数组是先不存入具体的元素值,只确定数组存储的数据类型和数组的长度

2.1.数组初始化的格式

数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];

注意:静态初始化和动态初始化数组的写法是独立的,不可以混用。

错误写法:

int[] arr = new int[3]{30,40,50};//错误

2.1.1.动态初始化数组元素默认值规则:

数据类型明细默认值
基本类型byte、short、char、int、long0
基本类型float、double0.0
基本数据类型booleanfalse
引用类型类、接口、数组、Stringnull

2.2.打分案例

需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手分数。

分析:

  1. 6名评委打分时后期录入的,一开始不知道具体的分数,因此定义一个动态初始化的数组存分数。
  2. 遍历数组中的每一个位置,每次提醒用户录入一个评委的分数,并存入到数组对应的位置。
  3. 遍历数组中的每个元素进行求和,最终算出平均分打印出来即可。
package item8;

import java.util.Scanner;

public class ArrayTest5 {
public static void main(String[] args) {
//需求:某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手分数。
//1、定义一个动态初始化的数组,负责后期储存6个评委的打分

double[] scores = new double[6];

Scanner sr = new Scanner(System.in);
//2.遍历数组中的每个位置,录入评委的分数,存入到数组中去

for (int i = 0;i <6;i++) {
System.out.println("请您输入当前第" + (i + 1)+ "个评委的分数:");
double score = sr.nextDouble();
scores[i] = score;
}
//3、遍历数组中的元素求和

double sum = 0;
for(int i = 0;i < scores.length;i++) {
sum += scores[i];

}

System.out.println("选手的最终得分是:" + sum/scores.length );
}
}

运行效果:

3.内存执行原理

Java内存分配介绍:

  1. 方法区
  2. 本地方法栈
  3. 程序计数器

3.1.方法区

字节码文件先加载到这里(放程序编译后的.class文件)

3.2.栈内存

方法运行时所进入的内存变量也是在这里(main...等)

3.3.堆内存

new(数组) 出来的东西会在这块内存中开辟空间并产生地址

例:说说int a = 20;int[] = new int[3]这两行代码的执行原理?

  • a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
  • arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。

注意:如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象

arr2 = null;//把null赋值给arr2
System.out.println(arr2);//null
System.out.println(arr2[0]);//异常
System.out.println(arr2.length);//异常

4.求最值案例

需求:找出分数最低和最高的

步骤:

  1. 把分数数据拿到程序中去,用数组装起来。
  2. 定义一个变量用于记录最终的最大值
  3. 遍历替换
package item9;

public class MaxRequire {
public static void main(String[] args) {
int[] scores = {15,32,57,98,-5};
int MaxScores = scores[0];
for(int i = 1; i < scores.length;i++) {
if(scores[i] > MaxScores) {
MaxScores = scores[i];
}
}
System.out.println("最大的数是:" + MaxScores);
}
}

运行效果是:

5.数组反转

需求:某个数组有五个数据:10,20,30,40,50,请将这个数组中的数据进行反转。

[10,20,30,40,50]反转后[50,40,30,20,10]

分析:

  • 数组反转操作实际上就是:依次前后交换数据即可实现。
package item10;

public class ArrayFlip {
public static void main(String[] args) {
//目标:完成数组反转
//1、准备一个数组
int[] numbers = {10,20,30,40,50};

//2、定义一个循环,设计2个变量,一个在前,一个在后
for(int i = 0,j = numbers.length - 1;i < j;i++,j--) {

//numbers[i]                   numbers[j]
//交换
//1、定义一个临时变量记住后一个位置处的值
int temp = numbers[j];
//2、把前一个位置处的值赋值个后一个位置了
numbers[j] = numbers[i];
//3、把临时变量中记住的后一个位置处的值赋值给前一个位置处
numbers[i] = temp;
}

//3、遍历数组中的每个数据,看是否反转成功了
for(int i = 0;i < numbers.length;i++) {
System.out.print(numbers[i] + " ");
}
}
}

运行效果:

6.随机排名

需求:用户依次录入几个序号,然后展示出一组随机的排名顺序

分析:

  • 在程序中录入几个数字存储起来-->使用动态初始化数组的方式。
  • 依次遍历数组中的每个数据。
  • 没遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换。
package item11;

import java.util.Random;
import java.util.Scanner;

public class RandomNumber {
public static void main(String[] args) {
//完成随机排名
//1、定义一个动态初始化的数组用于存储5个数据
int[] numbers = new int[5];

//2、提示用户录入数据
Scanner sr = new Scanner(System.in);
for(int i = 0;i < numbers.length;i++) {
System.out.println("请输入当前第" + (i + 1) + "个数据");
int number = sr.nextInt();
numbers[i] = number;
}

//3、打乱数组中元素顺
Random r= new Random();
for(int i = 0;i < numbers.length;i++) {
//numbers[i]
//每遍历到一个数据,都随机一个数组索引范围内的值,然后让当前遍历的数据与
 int code =  r.nextInt(numbers.length);//0 - 4
 //定义一个临时变量记住code的位置
 int temp = numbers[code];
 numbers[code] = numbers[i];
}
for(int i = 0;i < numbers.length;i++) {
System.out.println(numbers[i] + " ");
}
}
}

原文地址:https://blog.csdn.net/2301_81982769/article/details/143168932

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!