初识Java:面向对象程序设计基础入门(4)【长文】数组,字符串,集合框架类(向量,映射,哈希表)

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值