数组

作用

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

名词

长度: 数组中最大可存储的元素个数
元素: 数组中存储单个值
下标(索引): 元素在数组中的位置,从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.遍历数组A2.将取出的元素赋值给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("请重新输入!");}}}
}

Java学习笔记day05相关推荐

  1. Java学习笔记——流程控制

    Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...

  2. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  3. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  4. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  5. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  6. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  7. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

  8. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  9. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

最新文章

  1. CoreCLR系列随笔 之ClrJit项目之alloc.cpp文件分析(1)
  2. 皮一皮:这是为什么呢???
  3. PHP NULL 合并运算符
  4. Ubuntu下pip安装、升级、卸载
  5. python3 正则表达式 嵌套表格_在Python中将嵌套结构与正则表达式匹配
  6. 简单选择排序--转载
  7. linux服务器上svn的log_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器 | Linux 中国...
  8. linux跳转乌班图服务器,Linux-Ubuntu环境安装Nginx和配置二级域名跳转
  9. REACT是否真的就比VUE强?(文末附两个框架的学习福利)
  10. java中输出5个数_编写一个程序,要求用户输入5个数字,并输出这些数字中最大的数字和这些数字中最小的数字...
  11. HDU3709 Balanced Number
  12. Node.js:Node基础
  13. 按键精灵打怪学习-多窗口多线程后台技能
  14. springboot 动态指定日志路径(logback) 自动跟随项目路径
  15. 深度学习笔试、面试题 二
  16. 省市县行政区划代码sql及源地址
  17. 电影拍摄胶片比例_用于创建自己的电影胶片的10个很酷的Photoshop教程
  18. Top Android App使用的组件(2)
  19. VMWare网络模式(Centos7)
  20. 实战新浪微博、腾讯微博的分享功能

热门文章

  1. 弘辽科技:淘宝推广效果不好?是由哪些原因造成的?该如何解决?
  2. vis-timeline时间线
  3. 钟汉良日记:写作的基础是读书
  4. 静态HTML旅行主题网页设计与实现——联途旅游网服务平台网(39页)HTML+CSS+JavaScript
  5. uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)
  6. openGauss 社区 2022 年 9 月运作报告
  7. 批量生成二维码系统源码 电脑+手机自适应代码 含安装搭建教程
  8. Python基础---超市买水果小程序
  9. 家庭健身赛道闯入新选手,一面智能镜撑起一座健身房
  10. 软件测试 QA、QC、QM的关系与区别