> 文档中心 > Java——数组

Java——数组

文章目录

  • 数组
  • 1. 数组的定义
    • 1.1 静态初始化数组
    • 1.2 动态初始化数组
    • 1.3 元素默认值规则
  • 2. 数组的遍历
  • 3. 数组案例
    • 3.1 数组元素求和
    • 3.2 数组求最值
    • 3.3 猜数字游戏
    • 3.4 随机排名
    • 3.5 数组排序
  • 4. 数组的内存图
    • 4.1 内存分配介绍
    • 4.2 数组使用常见问题
  • 5. Debug工具

数组

1. 数组的定义

1.1 静态初始化数组

  • 定义数组的时侯直接给数组赋值
  • 数组属于引用数据类型,存储的是数组在内存中的地址信息
//完整格式//数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}double[] scores = new double[]{89.5,44.3,65.2};int[] ages = new int[]{12,14,17};//简化格式//数据类型[] 数组名 = {元素1,元素2,元素3...}int[] age = {12,14,17}; System.out.println(age); // [I@d8355a8 // [ 表示数组; I 表示int数据类型; @ 后面加16进制的地址int[] age = {12,14,17};//取值System.out.println(age[1]);//赋值age[2] = 10;System.out.println(age[2]);//访问数组长度System.out.println(age.length);

注意事项:

  • “数据类型[] 数组名” 也可以写成 “数据类型 数组名[]”
  • 什么类型的数组存放什么类型的数据,否则报错
  • 数组一旦定义出来,程序执行的过程中,长度、类型就固定了

1.2 动态初始化数组

//数据类型[] 数组名 = new 数据类型[长度]int[] arr = new int[3];//后赋值arr[0] = 10;System.out.println(arr[0]);

两种数组对比:

  • 当前已经知道存入的元素值——静态初始化
  • 当前还不清楚要存入哪些数据——动态初始化
  • 两种格式的写法独立,不可混用

1.3 元素默认值规则

数据类型 明细 默认值
基本类型 byteshortcharintlong 0
基本类型 floatdouble 0.0
基本类型 boolean false
引用类型 类、接口、数据、String null

2. 数组的遍历

  • 一个一个地把数组元素访问一边
//数组元素的遍历int[] arr = {12,34,45,25};for (int i = 0; i < arr.length ; i++) {    System.out.println(arr[i]);}

3. 数组案例

3.1 数组元素求和

int[] money = {13,54,23,65,78};int sum = 0;for (int i = 0; i < money.length ; i++) {    sum += money[i];}System.out.println("数组元素和是:"+ sum);   //233

3.2 数组求最值

//数组求最值int[] fox ={25,56,78,99,65,21};int max = fox[0];   //建议使用第一个元素作为参照for (int i = 1; i <fox.length ; i++) {    //遍历元素,依次比较    if(fox[i] > max){ max = fox[i];    }}System.out.println("数组最大值为:" + max);   //99

3.3 猜数字游戏

import java.util.Random;import java.util.Scanner;public class NoteDemo {    public static void main(String[] args) { //猜数字游戏:5个1-20之间的随机数,用户猜测 //猜中:提示猜中并输出该数据在数组中第一次出现地索引,还要打印数组内容 //未猜中:继续游戏直至猜中 int[] data = new int[5]; Random r = new Random(); for (int i = 0; i < data.length ; i++) {     data[i] = r.nextInt(20) + 1; } //使用死循环 Scanner sc = new Scanner(System.in); OUT: while(true){     System.out.println("输入:");     int guessData = sc.nextInt();     //遍历每个数据     for (int i = 0; i < data.length; i++) {  if(guessData == data[i]){      System.out.println("已猜中,数据索引是" + i);      break OUT;     //结束整个死循环  }     }     System.out.println("未猜中,请继续!"); } //输出数组全部元素 for (int i = 0; i < data.length; i++) {     System.out.print(data[i] + "\t"); }    }}

3.4 随机排名

import java.util.Random;import java.util.Scanner;public class NoteDemo {    public static void main(String[] args) { //键盘输入一组工号,最终随机数出一组作为排名 int[] codes = new int[5]; //定义一个循环,一次录入一个工号的存入对应的位置 Scanner sc = new Scanner(System.in); for (int i = 0; i < codes.length; i++) {     System.out.println("请输入第" + (i+1) +"个员工地工号");     int code = sc.nextInt();     codes[i] = code; } //遍历每个元素,随机一个索引并交换 Random r = new Random(); for (int i = 0; i < codes.length; i++) {     //随机索引一个位置     int index = r.nextInt(codes.length);     //定义一个临时变量     int temp = codes[index];     codes[index] = codes[i];     codes[i] = temp; } //遍历数组元素 for (int i = 0; i < codes.length; i++) {     System.out.print(codes[i] + "\t"); }    }}

3.5 数组排序

冒泡排序:每次从数组中找出最大值放在数组的后面

public class NoteDemo {    public static void main(String[] args) { int[] arr={5,2,3,1}; for (int i = 0; i < arr.length-1; i++) {     for (int j = 0; j < arr.length-i-1; j++) {  if (arr[j] > arr[j+1]){      int temp = arr[j+1];      arr[j+1] = arr[j];      arr[j] = temp;  }     } } for (int i = 0; i < arr.length; i++) {     System.out.println(arr[i] + "\t"); }    }}

4. 数组的内存图

4.1 内存分配介绍

方法区: 字节码文件加载时进入的内存
栈: 方法运行时所进入的内存;变量也是在这里
堆: new出来的东西会在这块内存中开辟空间并产生地址

4.2 数组使用常见问题

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

5. Debug工具

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

WIFI共享精灵