Java学习笔记day05

数组

作用

记录一组数据类型相同的数据
特点: 长度不可变

名词

长度: 数组中最大可存储的元素个数
元素: 数组中存储单个值
下标(索引): 元素在数组中的位置,从0开始,到长度-1结束

步骤

声明

数据类型[] 数组名;
    数组名就是数组的变量名
如: int[] ages;
    String[] names;
    double[] moneys;

创建

1.动态创建
    特点: 声明可以与创建分开
    不带值
        数组名 = new 数据类型[长度];
    带值
        数组名= new 数据类型[]{值1,值2,值3,...};
        创建时值的个数就是数组的长度
    
    声明并创建:
        不带值
            数据类型 数组名 = new 数据类型[长度];
        带值
            数据类型 数组名 = new 数据类型[]{值1,值2,值3,...};
            创建时值的个数就是数组的长度
2.静态创建
    特点: 必须在声明时创建
    数据类型[] 数组名 = {值1,值2,值3,...};
    创建时值的个数就是数组的长度
    
动态创建与静态创建的区别:
    1.使用的区别: 动态创建可以初始化也可以修改,静态创建只能初始化时使用
    2.内存的区别: 
        new关键字:
            含义: 新建
            作用: 在堆内存开辟一片空间
        静态创建在常量池中存储
        动态创建在堆内存中存储
    3.静态创建没有默认值,动态有默认值,基本数据类型默认为0,引用数据类型默认为null

操作

删
改
    修改数组中指定位置的元素
        数组名[下标] = 值;
    修改整个数组
        动态创建的语法
查
    查询数组中指定位置的元素
        数组名[下标]
    查询数组长度
        数组名.length
​
常见的错误(了解):
    数组下标越界异常
        ArrayIndexOutOfBoundsException
        解决方案: 修改下标到范围内
    空指针异常:
        NullPointerException
        解决方法: 保证不要使用null调用属性或方法

使用

遍历

将数组或集合中的数据,逐个取出
步骤:
    1.开启循环,变量的取值范围就是下标的取值范围
    2.在循环中通过变量获取数组中对应位置的值
    
增强for循环(foreach):
    遍历
    for(数据类型 变量名:要遍历的集合或数组){
        循环体
    }
    执行流程:
        1.取出数组或集合中的第0个元素,赋值给变量名
        2.执行循环体
        3.取出数组或集合中的第一个元素,赋值给变量名
        4.执行循环体
        5.取出数组或集合中的第二个元素,赋值给变量名
        6.执行循环体
        ...
        取出数组或集合中最后一个元素,赋值给变量名
        执行循环体
        结束循环
    foreach比for快3倍

查找

寻找数组是否存在指定元素
步骤:
    1.遍历
    2.使用获取的元素与指定元素对比,如果没有找到继续寻找,如果找到了结束遍历

复制

将数组A中的内容复制到数组B中
要求:
    数组B的长度要等与数组A
    数组B的数据类型要与数组A一致
思想:
    1.遍历数组A
    2.将取出的元素赋值给B数组对应的位置

扩容

将数组A的长度变大
思路:
    1.创建数组B,要求数组B长度大于数组A,并且与数组A数据类型一致
    2.将数组A中的数据复制到数组B中
    3.将数组B赋值给数组A

数组在参数中使用

形参

如:
    public static void add(int[] nums){
    
    }

实参

如:
    int[] nums = new int[]{1, 3, 5, 7};
    add(nums);

返回值

如:
    public static int[] add(int a, int b){
        int[] nums = new int[3];
        nums[0] = a;
        nums[1] = b;
        nums[2] = a + b;
        return nums;
    }

可变参数

是什么?
    形参中使用数组的变形
好处:
    传递参数时,可以传递数组,也可以多个值
语法:
    数据类型... 变量名
注意:
    只能在形参末尾使用,一个方法只能使用一个可变参数

练习

1.创建一个数组,存储身边6个人的年龄
2.创建一个数组,存储身边6个人的名称
3.创建一个数组,存储身边6个人的性别
4.获取年龄数组,名称数组,性别数组第3位的值,并打印
5.修改年龄数组,名称数组,性别数组第3位的值,为18,张三,男
6.遍历名称数组,要求打印格式如下
    [xxx,xxx,xxx,xxx,...]
7.将姓名数组扩容到10个长度,并获取最后一个元素打印输出
8.将年龄数组扩容到10个长度,并获取最后一个元素打印输出
9.使用可变参数计算多个数的乘积,并返回
10.查找张三在不在年龄数组中
11.点名器
//数组使用

public class Test01 {
	public static void main(String[] args) {
		int[] ages = {18, 19, 20, 21, 22, 23};
		String[] names = {"小明", "小鹏", "小俊", "小豪", "小红", "小圆"};
		char[] sexs = {'男', '男', '男', '男', '女', '女'};
		
		System.out.println("年龄: " + ages[2]);
		System.out.println("姓名: " + names[2]);
		System.out.println("性别: " + sexs[2]);
		
		ages[2] = 18;
		names[2] = "张三";
		sexs[2] = '男';
		
		System.out.print("[");
		for (int i = 0; i < names.length; i++) {
			if(i != names.length - 1) {
				System.out.print(names[i] + ",");
			}
			else {
				System.out.print(names[i]);
			}		
		}
		System.out.println("]");
		
		//获取扩容后的姓名数组
		String[] newNames = extendName(names);
		String name = newNames[newNames.length - 1];
		System.out.println("最后一个元素为: " + name);
		for (String s : newNames) {
			System.out.print(s + ",");
		}
		System.out.println();
		
		//获取扩容后的年龄数组
		int[] newAges = extendAge(ages);
		int age = newAges[newAges.length - 1];
		System.out.println("最后一个元素为: " + age);
		for (int i : newAges) {
			System.out.print(i + ",");
		}
		System.out.println();
		
		boolean b = findName("张三", newNames);
		if(b) {
			System.out.println("在数组中");
		}
		else {
			System.out.println("不在数组中");
		}
	}
	
	public static String[] extendName(String[] names) {
		String[] newNames = new String[names.length + 4];
		for(int i = 0; i < names.length; i++) {
			newNames[i] = names[i];
		}
		names = newNames;
		return names;
	}
	
	public static int[] extendAge(int[] ages) {
		int[] newAges = new int[ages.length + 4];
		for(int i = 0; i < ages.length; i++) {
			newAges[i] = ages[i];
		}
		ages = newAges;
		return ages;
	}
	
	//查找张三在不在姓名数组中
	public static boolean findName(String name, String[] names) {
		for (String s : names) {
			if(name.equals(s)) {
				return true;
			}
		}
		return false;
	}
}




//可变参数

public class Test02 {
	public static void main(String[] args) {
		int n = mul(1, 2, 3, 4, 5);
		System.out.println("1到5的乘积为: " + n);
	}
	
	public static int mul(int... nums) {
		int n = 1;
		for (int i : nums) {
			n *= i;
		}
		return n;
	}
}




//点名器

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

public class Test03 {
	public static void main(String[] args) {
		String[] names = {"张三", "李四", "王五", "马六", "候七", "龙八", "小红", "小丽", "老王"};	
		Scanner scanner = new Scanner(System.in);
		Random random = new Random();
		while(true) {
			System.out.println("是否要点名?\n1.点名\n2.不点名\n3.退出");
			int tag = scanner.nextInt();
			if(tag == 1) {
				int num = random.nextInt(names.length);
				System.out.println("请" + names[num] + "同学回答问题!");
			}
			else if(tag == 2) {
				continue;
			}
			else if(tag == 3) {
				System.out.println("欢迎下次使用!");
				break;
			}
			else {
				System.out.println("请重新输入!");
			}
		}
	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值