《疯狂java讲义2》读书笔记——数组

没有多维 数组

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

转载于:https://my.oschina.net/u/3007550/blog/779995

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值