如何定义一维数组
1. 数组的声明
String[] names;
int scores[];
2. 初始化
第一种:静态初始化:初始化数组与给数组元素赋值同时进行
names=new String[]{"Andy","小明","李强"};
第二种:动态初始化:初始化数组与给数组元素赋值分开进行
scores=new int[4];
3. 如何调用相应的数组元素:通过数组元素的下角标的方式来调用
下角标从0开始,到n-1结束。其中n表示的数组的长度
score[0]=87;
score[1]=89;
score[3]=98;
4. 数组的长度:通过数组的length属性 (数组一旦初始化,其长度是不可变的)
System.out.println(names.length);//3
System.out.println(scores.length);//4
5. 如何遍历数组远元素
for(int i=0;i<names.length;i++){
System.out.println(names[i]);
}
对于基于基本数据类型的变量创建的数组:byte、short、int、long、float、double、char、boolean
1. 对于byte、short、int、long而言:创建数字以后,默认值为0
2. 对于float、double而言:默认值为0.0
3. 对于char而言:默认值为空
4. 对于boolean而言,默认值为false
5. 对于引用类型的变量构成的数组而言:默认初始化值为null
关于数组在内存中的结构
内存的基本结构:栈(stack) 存放局部变量、对象的引用
堆(heap) new出来的东西
方法区
静态区
例题:
代码:
package com.company;
import java.util.Scanner;
public class StudentScore {
public static void main(String[] args) {
//1.创建Scanner的对象,并从键盘获取学生的个数studentNum
Scanner scan = new Scanner(System.in);
System.out.print("请输入学生人数:");
int studentNum = scan.nextInt();
System.out.println("请输入" + studentNum + "个成绩");
//2. 根据输入的学生的个数studentNum,创建一个长度为studentNum的int型的数组
int[] scores = new int[studentNum];
//3. 依次从键盘获取studentNum个学生的成绩,并赋予相应的数组元素,并获取studentNum个学生中的最高分
int maxScore = 0;
for (int i = 0; i < studentNum; i++) {
int score = scan.nextInt();
scores[i] = score;
if (score > maxScore) {
maxScore = score;
}
}
System.out.println("最高分是:" + maxScore);
//4. 遍历学生成绩的数组,并根据学生成绩与最高分的差值,赋予相应的等级,并输出
char level;
for (int z = 0; z < studentNum; z++) {
if (scores[z] >= maxScore - 10) {
level = 'A';
} else if (scores[z] >= maxScore - 20) {
level = 'B';
} else if (scores[z] >= maxScore - 30) {
level = 'C';
} else {
level = 'D';
}
System.out.println("student " + z + " score is " + scores[z] + " grade is " + level);
}
}
}
多维数组
二维数组[][]:数组中的数组
格式1(静态初始化)
int[][] arr=new int[][]{{1,2,3},{4,5,6},{7}}
格式2(动态初始化):
int[][] arr=new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1]=78;
格式3(动态初始化):
int[][] arr=new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null(注意:区别于格式1)
可以对这个三个一维数组分别进行初始化
arr[0]=new int[3]; arr[1]=new int[1]; arr[2]=new int[2];
注:
int[][] arr=new int[][3];//非法
二维数组内存结构:
数组的常见异常:
1、数组下标越界的异常:java.lang.ArrayIndexOutOfBoundsException
2、空指针的异常:java.lang.NullPointerException
杨辉三角
【提示】
1、第一行有1个元素,第n行有n个元素
2、每一行的第一个元素和最后一个元素都是1
3、从第三行开始,对于非第一行元素和最后一个元素的元素
yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j]
package com.company;
import java.util.Scanner;
public class TestYangHui {
public static void main(String[] args) {
System.out.print("请输入要输入杨辉三角的行数:");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int[][] yanghui = new int[num][];
//初始化二维数组
for (int i = 0; i < yanghui.length; i++) {
yanghui[i] = new int[i + 1];
}
//显式的为二维数组中的每个元素赋值
for (int i = 0; i < yanghui.length; i++) {
for (int j = 0; j < yanghui[i].length; j++) {
yanghui[i][0] = yanghui[i][i] = 1;
if (i > 1 && j > 0 && j < i) {
yanghui[i][j] = yanghui[i - 1][j - 1] + yanghui[i - 1][j];
}
}
}
//打印显示
for (int i = 0; i < yanghui.length; i++) {
for (int j = 0; j < yanghui[i].length; j++) {
System.out.print(yanghui[i][j] + "\t");
}
System.out.println();
}
}
}