java学习笔记_03数组

数组是什么
⚫ 数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。

1. 数组的静态初始化的写法是和特点什么样的?
数据类型[] 数组名    = { 元素1,元素2 ,元素3,… }; 
int[] ages = {12, 24, 36, 48, 60};
double[] scores = {89.9, 99.5, 59.5}; 
// 完整格式
数据类型[] 数组名    = new 数据类型[]{ 元素1,元素2 ,元素3… }; 
int[] ages = new int[]{12, 24, 36, 48, 60};
2. 数组是属于什么类型,数组变量名中存储的是什么?
⚫      引用数据类型,存储的数组在内存中的地址信息。

1. 如何访问数组的元素?数组名称[索引]
2. 如何访问数组的长度?
⚫      数组名称.length  
3. 数组的最大索引怎么获取?
数组名. length –    1 // 前提:元素个数大于0

⚫     数组一旦定义出来,程序执行的过程中,长度、类型就固定了。

1. 动态初始化的写法是什么样的?
数据类型[]  数组名    = new 数据类型[长度]; 
int[] ages = new int[4];
2. 两种数组定义时的特点和场景有什么区别
⚫      当前已经知道存入的元素值,用静态初始化。
⚫      当前还不清楚要存入哪些数据,用动态初始化。

 1. 什么是遍历?
⚫      一个一个的把数据访问一遍
2. 如何遍历数组?
int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++) { 
System.out.println(ages[i]);
}

数组遍历-求和
需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。 
分析:
①     把这5个数据拿到程序中去    ---> 使用数组
int[] money = {16, 26, 36, 6, 100};
②     遍历数组中的每个数据,然后在外面定义求和变量把他们累加起来。
int sum = 0;
for (int i = 0; i < money.length; i++) {
// i = 0 1 2 3 4 
sum += money[i];
}

1.  数组元素求最大值如何实现的?
①          数据拿到程序中去,用数组装起来。
②          定义一个变量用于记录最大值,这个变量建议默认存储第一个元素值作为参照。
③          遍历数组的元素,如果该元素大于变量存储的元素,则替换变量存储的值为该元素。
④          循环结束后输出最大值变量即可。

需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
➢        未猜中提示:“未命中”,并继续猜测
➢        猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据,  最 
终结束本游戏。
分析
①     随机生成5个1-20之间的数据存储起来    ---> 使用数组
②     定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死 
循环;如果没有猜中,提示继续猜测直到猜中为止。

import java.util.Random;
import java.util.Scanner;
public class Threaddemo {
	public static void main(String[] args) {
	/*需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
➢        未猜中提示:“未命中”,并继续猜测
➢        猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据,  最 
终结束本游戏。
分析
①     随机生成5个1-20之间的数据存储起来    ---> 使用数组
②     定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束死 
循环;如果没有猜中,提示继续猜测直到猜中为止。*/
		int[] arr = new int[5];
		Random r =new Random();
		for(int i =0;i<5;i++){
			int a = r.nextInt(20)+1;
			arr[i] = a;
		}
		Scanner sc =new Scanner(System.in);
		OUT:
		while(true) {
			int num = sc.nextInt();
			for(int j=0;j<5;j++){
				if(num == arr[j]){
					System.out.println("运气不错,猜中了");
					System.out.println("第一次出现位置是"+j);
					for(int m =0;m<5;m++) {
					System.out.print(arr[m]+"\t");}
					break OUT;}
				
			else if(num > arr[j]) {System.out.print("猜大了");break;}
			else if(num < arr[j]) {System.out.print("猜小了");break;}
				}
			}
			
		}
	}


随机排名
需求
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。 
请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
分析
①     在程序中录入5名员工的工号存储起来    ---> 使用数组。
② 依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。

import java.util.Random;
public class Threaddemo {
	public static void main(String[] args) {
	/*随机排名
需求
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。 
请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
分析
① 在程序中录入5名员工的工号存储起来    ---> 使用数组。
② 依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。*/
	int[] arr = {22,33,35,13,88};
	int temp =0;
			Random sc = new Random();
			for(int j=0;j<5;j++) {
			int i = sc.nextInt(5);
			temp = arr[j];
			arr[j] = arr[i];
			arr[i] = temp;
			}
			for(int a=0;a<5;a++) {
				System.out.print(arr[a]+"\t");
			}
		}
	}


数组排序
⚫ 就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作。
数组排序的技术
⚫     冒泡排序
⚫     选择排序
⚫     快速排序
⚫     插入排序
⚫     ...
数组搜索相关的技术
⚫     二分搜索
⚫     分块查找
⚫     哈希表查找
⚫      …

1. 冒泡排序的思想
⚫      从头开始两两比较,把较大的元素与较小的元素进行交换
⚫      每轮把当前最大的一个元素存入到数组当前的末尾
2. 冒泡排序的实现步骤。
⚫      定义一个外部循环控制总共需要冒几轮(数组的长度-1
⚫      定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1)。
⚫      如果当前位置的元素值>后一个位置的元素值,两者交换。 

java内存

 数组使用常见问题
⚫     问题1:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
⚫ 问题2:如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)

Debug工具
⚫ IDEA自带的断点调试(排错)工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。
DEBUG工具基本使用步骤
①     在需要控制的代码行左侧,点击一下,形成断点
② 选择使用Debug方式启动程序,启动后程序会在断点暂停
③     控制代码一行一行的往下执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值