这篇文章为你搞懂 2 个问题
1. 什么是数组, 数组是干嘛用的?
2. 数组如何使用?
考试结束后, 老师给二狗安排了一项任务, 统计班里 40 名同学的平均分. 按照我们之前的做法, 我们可以定义 40 个变量然后再相加除以 40 求出平均分, 但是这样太繁琐了, 有没有更好的办法呢? 那就是使用 数组.
数组
数组其实也是一个变量, 顾名思义存储了一组相同类型的数据, 声明一个数组就是在内存空间中分配出一连串的空间.
元素 1 | 元素 2 | 元素 3 | …… |
---|
使用数组需要四个步骤:
1. 声明数组 int[] a;
2. 分配空间 a=new int[5];
3. 赋值 a[0]=8;
4. 处理数据 a[0]=a[0]*10;
数组中的元素通过下标进行访问, 下标从 0 开始
数组长度是在分配完空间后是固定不变的
数组中所有的元素必须是相同的数据类型
1. 声明数组: 告诉计算机数据类型是什么
语法:
数据类型 数组名 [];
数据类型 [] 数组名;
敲一敲:
- public class DemoArray {
- public static void main(String[] args) {
- int[] score;// 成绩
- String[] name;// 名字
- }
- }
2. 分配空间: 告诉计算机分配几个连续的空间
语法:
数组名 = new 数据类型 [大小];
或者 声明数组同时并分配空间:
数据类型 [] 数组名 = new 数据类型 [大小];
敲一敲:
- public class DemoArray {
- public static void main(String[] args) {
- int[] score;// 成绩
- String[] name;// 名字
- score=new int[40];
- name=new String[40];
- // 声明变量同时并分配空间
- int[] age=new int[40];
- }
- }
3. 赋值: 向分配的空间中放数据
敲一敲:
- public class DemoArray {
- public static void main(String[] args) {
- int[] score;// 成绩
- String[] name;// 名字
- score=new int[40];
- name=new String[40];
- // 声明变量同时并分配空间
- int[] age=new int[40];
- name[0]="张三";// 向数组中第一个元素存放数据
- name[1]="李四";// 向数组中第一个元素存放数据
- }
- }
但是这样一个一个去赋值太麻烦了
敲一敲: 1. 声明数组的同时赋值
- public class DemoArray1 {
- public static void main(String[] args) {
- int[] score= {67,55,93};// 自动确定长度为 3
- String[] name=new String[] {"张三","李四","王五"};
- }
- }
敲一敲: 2. 使用循环从控制台获取信息并赋值
- import java.util.Scanner;
- public class DemoArray2 {
- public static void main(String[] args) {
- Scanner input=new Scanner(System.in);
- int[] score=new int[40];
- for (int i = 0; i < score.length; i++) {
- score[i]=input.nextInt();
- }
- }
- }
length 是数组的属性, 用于获取数组的长度
4. 处理数据
敲一敲: 遍历数组
- public class DemoEachArray {
- public static void main(String[] args) {
- String[] name= {"香蕉","菠萝","西瓜"};
- for (int i = 0; i < name.length; i++) {
- String temp=name[i];
- System.out.println(i+" "+temp);
- }
- }
- }
可以打印数组, 也可重新赋值等操作
工具类 Arrays
Arrays 类包含操作数组的各种方法, 使用这个类需要
加入一行代码
import java.util.Arrays; 引入后使用.
方法名 | 说明 |
---|---|
sort() | 对指定的数组按数字升序进行排序。 |
toString() | 返回指定数组内容的字符串表示形式。 |
copyOf() | 复制指定的数组到一个新数组,并指定新数组的长度 |
敲一敲: sort 的使用
- import java.util.Arrays;
- public class DemoArraysSort {
- public static void main(String[] args) {
- int[] ages= {33,18,37,55,3};
- Arrays.sort(ages);
- for(int i=0;i<ages.length;i++) {
- System.out.println(i+" "+ages[i]);
- }
- }
- }
敲一敲: toString 的使用
- import java.util.Arrays;
- public class DemoArraysToString {
- public static void main(String[] args) {
- String[] name= {"张三","李四","王五","赵六"};
- String result=Arrays.toString(name);
- System.out.println(result);
- double[] money= {55.4,34,66,23.3};
- System.out.println(Arrays.toString(money));
- }
- }
敲一敲: copyOf 的使用
- import java.util.Arrays;
- public class DemoArraysCopyOf {
- public static void main(String[] args) {
- int[] ages= {33,18,37,55,3};
- int[] newArray1=Arrays.copyOf(ages, 3);
- System.out.println("新数组:"+Arrays.toString(newArray1));
- int[] newArray2=Arrays.copyOf(ages,8);
- System.out.println("新数组:"+Arrays.toString(newArray2));
- }
- }
使用 copyOf() 时, 如果指定的副本数组的长度小于源数组的长度, 后面的元素都将被截断. 如果指定的副本数组的长度大于源数组的长度, 多出的元素都将使用默认值.
数组元素默认值
如果一个数组已经指定了长度, 但是没有给元素赋值, 那么没有赋值的元素都会有默认值.
类型 | 默认值 |
---|---|
String | null |
int | 0 |
double | 0.0 |
boolean | false |
Object | null |
敲一敲: 体验各种类型的默认值
- import java.util.Arrays;
- public class DemoDefaultValue {
- public static void main(String[] args) {
- String[] name=new String[10];
- System.out.println("字符串:"+Arrays.toString(name));
- int[] age=new int[10];
- System.out.println("整数:"+Arrays.toString(age));
- double[] money=new double[10];
- System.out.println("小数:"+Arrays.toString(money));
- Object[] obj=new Object[10];
- System.out.println("对象:"+Arrays.toString(obj));
- boolean[] results=new boolean[10];
- System.out.println("布尔值:"+Arrays.toString(results));
- char[] chrs=new char[10];
- System.out.println("字符:"+Arrays.toString(chrs));
- System.out.println((int)chrs[0]);// 字符对应的整数
- }
- }
试一试:
1. 从控制台中输入 5 个人的年龄, 存入数组中, 求出最小的年龄
2. 将一组乱序的字符排序后, 进行升序和逆序输出
来源: http://www.jianshu.com/p/f74b81f76a71