I.数组
1.定义
严格来说,数组并不是本章所介绍的库类。它更接近于C语言当中的数组概念(采用指针来指向一连串处于一个集合内的多个同类型的元素),直接采用类型-变量名语句完成定义。
char a[];
char []b;
特别指出:
char []a,b,c;
char a[],b[],c[];
char []a,[]b,[]c;
这三个语句是等价的。
允许在定义之初初始化赋值:
char []c={'a','b','c','d','e'};
等价于:
char c[]=new char(5);
char c[0]='a';
char c[1]='b';
char c[2]='c';
char c[3]='d';
char c[4]='e';
java的数组下标从零开始。
2.创建实例对象
与C语言不同的是,定义数组并不需要声明空间,仅在建立数组对象时必须采用构造方法声明空间。在C语言当中:
char a[10];
char *b;
b=(char *)malloc(10*sizeof(char));
这样的语句才能有效地定义出数组。而Java中:
char c=new char(5);
Java中不必声明空间,但是声明并初始化之后空间也就分配完毕,不能使用或访问其他的空间:
正确示例:
char a[]= {'a','b','c','d'};
System.out.println(a[3]);
错误示例:
char a[]= {'a','b','c','d'};
a[4]='e';
System.out.println(a[4]);
报错为:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4 at whatever.w.main(w.java:7)
仅仅赋值或者调用都会报错。
3.引用数据类型数组
当数组元素的数据类型是引用数据类型(类,接口,数组类型),a[i]表示一个引用。尚未赋值时,默认值为null。
String s[]=new String[3];
s[0]=new String("abc");
其中的s[0]就是一个对String类的引用。也可以:
String s[]= {new String("abc"),new String("def"),new String("ghi")};
4.多维数组
1.创建多维数组对象的方法
(1)直接创建多维数组对象
int [][]matrix=new int[2][2];
(2)从高维开始逐渐创建数组对象
比如一个存储器的锁存器阵列为256* 128* 8,我们要定义一个三维数组表示之。
int [][][]matrix;
matrix=new int[256][][];
for(int i=0;i<256;i++)matrix[i]=new int[128][];//matrix有256个元素,每个元素matrix[i]有128个元素
for(int i=0;i<256;i++)
for(int j=0;j<128;j++)matrix[i][j]=new int[8];//每个matrix[i][j]都有八个整型元素
高维数组的各个元素都是数组,且元素个数未必要一样。
(3)数组初始化语句
int [][][]matrix= {
{
{1,2},{3,4}},{
{5,6},{7,8}},{
{9,10},{11,12}}};
在这里,有:
matrix[0][0][0]=1;
matrix[0][0][1]=2;
matrix[0][1][0]=3;
matrix[0][1][1]=4;
matrix[1][0][0]=5;
matrix[1][0][1]=6;
matrix[1][1][0]=7;
matrix[1][1][1]=8;
matrix[2][0][0]=9;
matrix[2][0][1]=10;
matrix[2][1][0]=11;
matrix[2][1][1]=12;
2.多维数组引用实例:三阶幻方
三阶幻方是将1-9这些数字填入九宫格的游戏,要求九个位置上的数字满足每行,每列,每条对角线上的三个数字都是相等的(可见等于15)。
这里给出一设计,不再详述内容:
package whatever;
public class Grid {
int board[][];
public Grid()
{
board=new int[3][3];
}
public void outputGrid()
{
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
System.out.print(board[i][j]+" ");
}
System.out.print("\n");
}
}
public void initGrid()
{
int add=1;
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
board[i][j]=add;
add++;
}
}
}
public boolean isLastData()
{
int check=9;
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
if(board[i][j]!=check)return false;
check--;
}
}
return true;
}
public void nextData()
{
for(int i=board.length-1;i>=0;i--)
{
for(int j=board[i].length-1;j>=0;j--)
{
if(board[i][j]==9)board[i][j]=1;
else
{
board[i][j]++;
return;
}
}
}
}
public boolean isDuplicate()
{
int digit[]=new int[10];
for(int k=0;k<=9;k++)
{
digit[k]=0;
}
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
digit[board[i][j]]+=1;
}
}
for(int t=1;t<=9;t++)
{
if(digit[t]!=1)return true;
}
return false;
}
public