没有多维 数组
java语言里的数组类型是引用类型,因此,数组变量其实是一个引用,这个引用指向真实的 数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情形看上去很像多位数组。
定义数组类型的语法:type[] arrName;,这是典型的一维数组的定义语法 ,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,则可以把type具体成int[],那么上面定义数组的语法就是int([][] arrName)。
如果把int这个类型扩大到java的所有类型(不包括数组 类型),则出现了定义二维数组的语法:
arrName = new type[]
java语言采用上面的语法格式来定义二维数组,但它的实质还是一维数组,只是其中数组元素也是引用,数组元素里保存的医用指向一维数组。
执行初始化:
arrName = new type[length][]
java中对多维数组的 定义就是来源于此。
操作数组的工具类
java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组。
》int binarySearch(type[] a, type key): 使用二分法查询key元素值在数组a中出现的索引:如果a数组不包含key元素值,则返回负数。调用该方法时要求数组中元素已经按升序排列,这样才能得到正确结果。
》type[] copyOf(type[] original, int newLength): 这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。
》boolean equals(type[] a2): 如果a数组和a2数组的长度相等,而且a数组和a2数组的元素也一一相同,该方法将返回true。
》void sort(type[] a): 该方法对a数组的数组元素进行排序。
》String toString(type[] a): 该方法将一个数组转换成一个字符串。
下面是示范程序:
import java.util.Arrays;
public class ArraysTest
{
public static void main(String[] args)
{
//定义一个a数组
int[] a = new int[]{3,4,5,6};
//定义一个a2数组
int[] a2 = new int[]{3,4,5,6};
//a数组和a2数组的长度相等,每个元素依次相等,将输出true
System.out.println("a数组和a2数组是否相等:" + Arrays.equals(a,a2));
//通过复制a数组,生成一个新的b数组
int[] b = Arrays.copyOf(a,6);
System.out.println("a数组和b数组的值是否相等:" + Arrays.equals(a,b));
//输出b数组的元素,将输出[3,4,5,6,0,0]
System.out.println("b数组的元素为:" + Arrays.toString(b));
//将b数组元素的第三个元素(包括)到第五个数组的元素(不包括)赋值为1
Arrays.fill(b,2,4,1);
//输出b数组的元素,将输出[3,4,1,1,0,0]
System.out.println("b数组的元素为:" + Arrays.toString(b));
//对b数组进行排序
Arrays.sort(b);
//输出b数组的元素,将输出{0,0,1,1,3,4]
System.out.println("b数组的元素为:" + Arrays.toString(b));
}
}
数组应用举例
只挑选一个比较感兴趣的例子:五子棋
import java.io.*;
public class Gobang
{
//定义一个二位数组来充当棋盘
private String[][] board;
//定义棋盘的大小
private static int BOARD_SIZE = 15;
public void initBoard()
{
//初始化棋盘数据
board = new String[BOARD_SIZE][BOARD_SIZE];
//把每一个元素赋为"+",用于在控制台面画出棋盘
for (int i = 0 ;i < BOARD_SIZE ;i++ )
{
for (int j = 0;j < BOARD_SIZE ;j++ )
{
board[i][j] = "+";
}
}
}
//在控制台输出棋盘方法
public void printBoard()
{
//打印每一个数组元素
for (int i = 0 ;i < BOARD_SIZE ;i++ )
{
for (int j = 0;j < BOARD_SIZE ;j++ )
{
//打印数组元素后不换行
System.out.print(board[i][j]);
}
//每打印完一行数组元素后输出一个换行符
System.out.print("\n");
}
}
public static void main(String[] args)throws Exception
{
Gobang gb = new Gobang();
gb.initBoard();
gb.printBoard();
//这是用于获取键盘输入的方法
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String inputStr= null;
//br.readerLine():每当键盘上输入一行内容后按住回车键,刚输入的内容将被br读取到
while ((inputStr = br.readLine()) != null)
{
//将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串
String[] posStrArr= inputStr.split(",");
//将2个字符串转换成用户下棋的坐标
int xPos = Integer.parseInt(posStrArr[0]);
int yPos = Integer.parseInt(posStrArr[1]);
//把对应的数组元素赋为"o".
gb.board[yPos -1][xPos -1]= "O";
gb.printBoard();
System.out.println("请输入您下棋坐标,应以x,y的格式:");
}
}
}
*此程序针对于初学者的一个简单范例,里面涉及到java其它基础知识:与用户互动——键盘输入;异常处理。(棋子我不知道这么弄成黑色棋子,所以用大写字母O表示了。)
无关事要:本来我准备几天前就写这篇博客的,来记录我的java历程,因为我意志不坚定,拖延症犯了,各种理由搪塞自己;刚好这两天休息就写了这篇博客(很自豪,虽然写的不好),我希望我可以一直坚持下去,努力!