数组是有序排列的,数组的长度就是元素的个数。
一维数组
/*一维数组的使用:
* ①一维数组的声明和初始化
* ②如何调用数组的指定位置的元素
* ③如何获取数组的长度
* ④如何遍历数组
* ⑤数组元素的默认初始化值 见ArrayTest1.java
*/
package com.atguigu.java;
public class ArrayTest {
public static void main(String[] args) {
//①一维数组的声明和初始化
int[] ids; //声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids=new int[]{ 1001,1002,1003,1004};
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names=new String[5];
//数组一旦初始化完成,其长度就确定了
//②如何调用数组的指定位置的元素:通过角标
//数组的角标从0开始到数组长度-1结束
names[0]="哈哈哈";
names[1]="黑呵呵";
names[2]="嘿嘿和";
names[3]="科科达";
names[4]="顶顶顶";
//③如何获取数组的长度:length属性
System.out.println(names.length); //5
System.out.println(ids.length); //4
//④如何遍历数组
for(int i=0;i<names.length;i++){
System.out.println(names[i]);
}
}
}
package com.atguigu.java;
/*
* ⑤数组元素的默认初始化值
* 数组元素是整型:0 (默认初始化值 )
* 数组元素是浮点型:0.0
* 数组元素是char型,默认为0(不是'0',而是说某一个字符映射为0)eg: 'a' 映射为97
* 数组元素为Boolean型:默认为false
* 数组元素为引用数据类型(此处以String为例)时,默认为: null
* */
public class ArrayTest1 {
public static void main(String[] args) {
int[] arr=new int[4];
for(int i=0;i<arr.length;i++){
//没有赋值,输出试试
System.out.println(arr[i]);
}
System.out.println("************");
float[] arr2=new float[5];
for(int i=0;i<arr2.length;i++)
System.out.println(arr2[i]);
System.out.println("************");
char[] arr3=new char[5];
for(int i=0;i<arr3.length;i++)
System.out.println("---"+arr3[i]+"----"); //此处输出类似空格的效果,但不是空格,空格的ascll码不是从0
System.out.println("************");
boolean[] arr4=new boolean[5];
for(int i=0;i<arr4.length;i++)
System.out.println(arr4[i]);
System.out.println("************");
String[] arr5=new String[5];
for(int i=0;i<arr5.length;i++)
System.out.println(arr5[i]);
}
}
趣味练习:
package com.atguigu.exer;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[]{8,2,1,0,3};
int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
String tel = "";
for(int i = 0;i < index.length;i++){
tel += arr[index[i]];
}
System.out.println("联系方式:" + tel); //18013820100
}
}
}
练习:
package com.atguigu.exer;
import java.util.Scanner;
public class ArrayDemo1 {
public static void main(String[] args) {
//1,使用Scanner读取学生个数
Scanner scanner=new Scanner(System.in);
System.out.println("请输入学生人数:");
int number=scanner.nextInt();
//2,创建数组,存储学生成绩,动态初始化
int[] scores=new int[number];
//3,给数组中元素赋值
System.out.println("请输入"+number+"位同学成绩:");
for(int i=0;i<scores.length;i++){
scores[i]=scanner.nextInt();
}
//4,获取数组元素中元素的最大值:最高分
int maxScore=0;
for(int i=0;i<scores.length;i++){
if(maxScore<scores[i]){
maxScore=scores[i];
}
}
//5,根据每个学生成绩与最高分的差值,得到每个学生分数等级,并输出等级和成绩
char level;
for(int i=0;i<scores.length;i++){
if(maxScore-scores[i]<=10){
level='A';
}else if(maxScore-scores[i]<=20){
level='B';
}else if(maxScore-scores[i]<=30){
level='C';
}else{
level='D';
}
System.out.println("student "+i+" SCORE is "+scores[i]+","+ "grade is"+level);
}
}
}
多维数组
1,二维数组的使用
/*⑤二维数组元素的默认初始化值
* 规定:
* 二维数组分为外层数组的元素和内层数组的元素
* int[][] arr=new int[4][3];
* 外层元素:arr[0],arr[1]等
* 内层元素:arr[0][0],arr[1][2]等
*
*对于初始化方式一如( int[][] arr=new int[4][3];):
* 外层元素初始化值为:地址值
* 内层元素初始化值为:与一维数组初始化情况相同
*针对初始化方式二如(double[][] arr3=new double[4][];):
* 外层元素初始化值为:null
* 内层元素初始化值为:会报错,不能调用
* */
package com.atguigu.java;
public class ArrayTest3 {
public static void main(String[] args) {
int[][] arr=new int[4][3];
System.out.println(arr[0]); //输出一个地址值:[I@15db9742
System.out.println(arr[0][0]);//0
System.out.println("*************");
float[][] arr1=new float[4][3];
System.out.println(arr1[0]); //输出一个地址值:[F@6d06d69c
System.out.println(arr1[0][0]);//0.0
System.out.println("*************");
String[][] arr2=new String[4][3];
System.out.println(arr2[0]); //输出一个地址值:[Ljava.lang.String;@7852e922
System.out.println(arr2[0][0]);//null
System.out.println("*************");
//推理
double[][] arr3=new double[4][];
System.out.println(arr3[1]); //null,一维数组元素仍为数组,而数组属于引用数据类型未赋值,默认为null
System.out.println(arr3[1][0]);//报错,空指针异常
System.out.println("*************");
}
}
二维数组的内存解析: