一维数组
//静态初始化一个数组,不能指定数组长度 int[] arr1=new int[]{1,2,3,4,5}; //可简写为 int[] arr1={1,2,3,4,5}; //动态初始化一个数组,先指定数组长度,以后再逐个赋值 int[] arr2=new int[5]; arr2[0]=1; //也可以先声明,再初始化 //int[] arr3; //arr3=....... //数组长度 System.out.println("数组arr1的长度:"+arr1.length); /* foreach循环可以遍历数组、集合,但只能访问元素的值,不能修改。 数组的元素类型必须相同,集合的元素类型可以不同 临时变量表示当前元素 */ for(int i:arr1){ System.out.println(i); }
二维数组
//每行的元素个数可不同 //静态初始化一个二维数组,每行都是一个一维数组 int[][] arr1=new int[][]{ {1,2}, {1,2,3}, {1,2,3,4,5} }; //动态初始化一个二维数组,只需指定行数,列数可缺省,也可写上,以后再逐个元素赋值 int[][] arr2=new int[3][]; //同样可以先声明,再初始化 //int[][] arr3; //arr3=.....
JDK8自带的Arrays类
JDK8自带的Arrays类,提供了大量操作数组的方法,包括索引、排序、比较、赋值、复制等,均为静态方法。
以parallel开头的方法和缺少此前缀的方法效果完全相同,只是parallel开头的方法利用CPU的并行提高了效率,速度更快
View -> Quick Documentation 查看方法说明的快捷键,IDEA为Ctrl+Q
int[] arr1={1,3,2,5,4}; //复制 int[] arr2=Arrays.copyOf(arr1,arr1.length); //二分搜索,第二个参数是要搜索的值,返回的索引可能是负数——倒着搜索 System.out.println(Arrays.binarySearch(arr1,2)); //排序 Arrays.sort(arr1); for(int i:arr1){ System.out.print(i+" "); } System.out.println(); //并行排序 Arrays.parallelSort(arr2); for(int i:arr2){ System.out.print(i+" "); } System.out.println();
数组实例——将阿拉伯数字转换为最大写
将阿拉伯数字转换为最大写,比如1234转换为壹仟贰佰叁拾肆。
1 package my_package; 2 3 4 public class Transform { 5 private String[] arr1={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; 6 private String[] arr2={"拾","佰","仟","万"}; 7 8 public static void main(String[] args) { 9 Transform t=new Transform(); 10 System.out.println(t.transform(12345)); 11 } 12 13 public StringBuffer transform(int num){ 14 String str=Integer.toString(num); 15 int length=str.length(); 16 StringBuffer result=new StringBuffer(); 17 //遍历字符串的每一个字符 18 for(int i=0;i<length;i++){ 19 //char型数值-相应的阿拉伯数字=48,ASCII码值相差48。比如'3'-3=48 20 int n=str.charAt(i)-48; 21 //刚好是对应的 22 result.append(arr1[n]); 23 24 //不是最后一位,且不为0,就加单位 25 if(i!=length-1 && n!=0){ 26 result.append(arr2[length-i-2]); 27 } 28 29 } 30 return result; 31 } 32 33 }
以上代码只能实现 万 及以下 的转换。
数组实例——实现棋盘落子
五子棋、连连看、俄罗斯方块、扫雷等常见小游戏,都可以通过二维数组实现。
棋盘落子效果图:
源码:
package my_package; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Gobang { //定义棋盘大小为15*15 private static int BOARD_SIZE=15; //定义一个二维数组来充当棋盘 private static String[][] board; //初始化棋盘数组 public void initBoard(){ board=new String[BOARD_SIZE][BOARD_SIZE]; //把每个元素赋为“十” for(int i=0;i<15;i++){ for(int j=0;j<15;j++){ board[i][j]="十"; } } } //在控制台打印棋盘 public void printBoard(){ for(int i=0;i<15;i++){ for(int j=0;j<15;j++){ System.out.print(board[i][j]); } //打印完一行后换行 System.out.print(" "); } } public static void main(String[] args) throws IOException { Gobang gb=new Gobang(); gb.initBoard(); gb.printBoard(); //接收控制台输入棋盘坐标 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str=null; System.out.println("请输入落子点的坐标:"); while((str=br.readLine()) != null){ String[] arr=str.split(","); int x=Integer.parseInt(arr[0]); int y=Integer.parseInt(arr[1]); //需要先判断该点是否已有子,若已有子,则不能再落子。此处省略 board[x-1][y-1]="●"; //刷新 gb.printBoard();; //每次落子后需判断输赢,进行4次循环扫描,横、竖、左斜、右斜,看是否有5子连着,没有就接着下。此处省略 System.out.println("请输入落子点的坐标:"); } } }