1、一维数组
数组的概念:
数组使同一种类型数据的集合;即能够存放多个相同类型的数据的容器。
数组的定义方式
数组是存放多个数据的容器,Java中需要使用new关键字来创建容器,在创建容器时也要明确容器的大小,即容器中存放数据个数。
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
int[] arr=new int[3];//通过new关键字创建了一个长度为3,元素类型是int的数组实体。
数组的好处
数组可以存储多个数据,而且可以对数据进行编号,从0开始。操作元素完成可以通过编号(索引)完成。
int[] arr = new int[3];
arr[0] = 3; //给数组编号(角标)为0的空间中存放int类型的常量值3 System.out.println(arr[1]);//输出数组编号为1空间中的值
常见问题
数组角标越界异常
ArrayIndexOutOfBoundsExcepition:访问到了数组不存在的索引时,会发生该异常
空指针异常
NullPointerException:当使用没有任何实体指向的引用变量操作实体时,运行会发生该异常
2、二维数组
数组定义
int[][] arr=new int[3][2];
定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0],arr[1],arr[2]。
二维数组赋值:arr[1][1]=78;
System.out.println(arr);//二维数组实体
System.out.println(arr[0]);//一维数组实体
System.out.println(arr[0][0]);//一维数组中的元素
内存图解
public static void main(String[] args){
int[][] arr=new int[3][2];
arr[1][1]=78;
}
3、经典例题
(1)编写一个方法,求整数矩阵中特定列的所有元素的和,使用下面的方法头:
public static double sumColumn(double[][] m,int columnIndex)
编写一个测试程序,读取一个3*4的矩阵,然后显示每列元素的和。
import java.util.Scanner;
class Class35{
public static void main(String[] args){
//1.创建了一个3×4的矩阵
double[][] matrix=new double[3][4];
//2.提示用户输入数据按照行输入
Scanner scanner=new Scanner(System.in);
System.out.println("Enter a 3-by-4 matrix row by row:");
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=scanner.nextDouble();
}
}
System.out.println(sumColumn(matrix,2));
}
public static double sumColumn(double[][] m,int columnIndex){
double sum=0;
for(int i=0;i<m.length;i++){
sum+=m[i][columnIndex];
}
return sum;
}
}
(2)编写以下方法,如果参数中的list数组已经按照升序排好了,则返回true。
public static boolean isSorted(int[] list)
编写一个测试程序,提示用户输入一个列表,显示该列表是否已经排好序。注意,输入中的第一个数表示列表中的元素个数。该数不是列表的一部分。
import java.util.Scanner;
class Class31{
public static void main(String[] args){
//1.获取输入的数据
//2.长度+数据若干
//3.根据长度创建数组
//4.输入数据
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a list:");
int[] list=new int[scanner.nextInt()];
for(int i=0;i<list.length;i++){
list[i]=scanner.nextInt();
}
//5.判断数据
if(isSorted(list)){
System.out.println("OK");
}else{
System.out.println("NO");
}
}
public static boolean isSorted(int[] list){
for(int i=1;i<list.length;i++){
if(list[i-1]>list[i]){
return false;
}
}
return true;
}
}
(3)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是0或1的行、列和对角线。
import java.util.Scanner;
class Class36{
/*
1.提示用户输入方阵的尺寸
2.创建相应的二维数组
3.遍历二维数组,给每个元素随机赋值0或1
4.逐行判断是否全部相等
5.逐列判断是否全部相等
6.判断主对角线是否全=
7.判断副对角线是否全=
*/
public static void main(String[] args){
//1.
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the size for the matrix:");
int size=scanner.nextInt();
//2.
int[][] matrix=new int[size][size];
//3.
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=Math.random()>0.5?1:0;
}
}
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
//4.
for(int i=0;i<matrix.length;i++){
boolean flag=true;
for(int j=1;j<matrix[i].length;j++){
if(matrix[i][0]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[i][0]+" on row "+i);
}
}
//5.
for(int j=0;j<matrix.length;j++){
boolean flag=true;
for(int i=1;i<matrix.length;i++){
if(matrix[0][j]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[0][j]+" on col "+j);
}
}
//6.
boolean flag=true;
for(int x=1;x<matrix.length;x++){
if(matrix[0][0]!=matrix[x][x]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[0][0]+" on major diagonal ");
}
//7.
flag=true;
for(int i=matrix.length-2,j=1;i>=0&&j<matrix.length;i--,j++){
if(matrix[matrix.length-1][0]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[matrix.length-1][0]+" on sub diagonal ");
}
}
}