没有多维 数组
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历程,因为我意志不坚定,拖延症犯了,各种理由搪塞自己;刚好这两天休息就写了这篇博客(很自豪,虽然写的不好),我希望我可以一直坚持下去,努力!