初识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 boolean isAnwser()
	{
		
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Quaint_Senator/article/details/88861020

智能推荐

各服务器通过JNDI访问资源设置初始化参数_设置jndi相关资源-程序员宅基地

文章浏览阅读271次。#JBOSSjava.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.provider.url=localhost:1099 #Glassfishjava.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFa_设置jndi相关资源

C语言中_align()关键字的作用与内存对齐的原理_c align-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏27次。cpu在访问内存的时候是以一个字(字节)进行传输的(计算机中,一个机器字长就是cpu位数,32位cpu,四个字节为一个字)。也就是说cpu读取数据每次都是四个字节四个字节的读取,计算机最初是从地址0开始寻址,那么寻址也就是4个字节4个字节的地址依次往后找。如果我们只需要读取一个字节的char型变量,那么计算机也是读取它所在的4个字节出来,然后提取出那个目标字节就行了,因为32位计算机每次都是4字节为操作单位。 如果不指定对齐方式,默认单字节对齐,即最自然的变量申请和存放方式,这样不会造成内存空隙浪费,但._c align

认识ASP.NET配置文件Web.config _.net webconfig中如何配置kafka-程序员宅基地

文章浏览阅读790次。一、认识Web.config文件   Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置_.net webconfig中如何配置kafka

笔记本触摸屏使用技巧_全触屏笔记本操作视频-程序员宅基地

文章浏览阅读3k次。# 使用那破小米笔记本那么久了,都没细看触摸屏技巧。现在总结一下:## 1个手指技巧- 常用的移动、点击技巧## 2个手指技巧- 点击(如同鼠标右击)- 上下左右移动(就是屏幕中如果有如下图的状态栏即可操作)- 3个手指技巧点击左右移动(任务窗口切换)点击上移动(多桌面和任务窗口)点击下移动(回到桌面)- 4个手指技巧点击左右移动(桌..._全触屏笔记本操作视频

openRTSP分析1_failed to teardown: no rtsp session is currently i-程序员宅基地

文章浏览阅读9.7k次。openrtsp是live555里面作为rtsp客户端的一个例子程序。默认是接收rtsp流并保存为文件,里面对多种格式进行了处理。网上也有很多对openrtsp的分析的文章,但是个人感觉都不是太详细,一般都只有个大概的流程。这里再给这个过程捋一捋。主要是一些重要的线路,细节部分就不予讨论。在playCommon.cpp中是从main开始执行的。开始是 TaskScheduler_failed to teardown: no rtsp session is currently in progress

ionic 全屏显示页面 输入框被输入法遮盖_ionic 安卓占满整个屏幕-程序员宅基地

文章浏览阅读4.1k次。解决 ionic 全屏显示页面 输入框被输入法遮盖 ,避免在config.xml中配置下;_ionic 安卓占满整个屏幕

随便推点

zyduino 单片机_Arduino Industrial 101开发板 ATmega 32u4 MCU单片机-程序员宅基地

文章浏览阅读355次。产品介绍:Arduino Industrial 101是采用ATmega 32u4 MCU所开发的,面向101 Industrial LGA模块的开发板。模块支持Linux发行版,以名为Linino的OpenWRT为基础。此款开发板具有一个内置型WiFi(IEEE 802.11b/g/n操作速度高达150Mbps 1x1 2.4 GHz),输出了3个数字引脚(2个PWM输出)和4个模拟输入:排针上..._arduino101主要技术参数

iOS 建造者模式_ios 创建者模式-程序员宅基地

文章浏览阅读370次。//【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数//原文地址http://www.cnblogs.com/wengzilin/p/4365855.html///iOS 建造者模式//感觉建造者模式与工厂方法模式非常类似,但是加入了指挥者类。//工厂模式一般都是创建一个_ios 创建者模式

神经网络自适应反馈控制设计-程序员宅基地

文章浏览阅读4.9k次,点赞5次,收藏67次。文章目录写在前面问题描述自适应神经网络控制器RBF神经网络神经网络训练自适应律之一自适应律之二写在前面自适应神经网络控制器将自适应控制与神经网络相结合,通过神经网络系统辨识的方法达到自适应控制的目的。控制器针对系统模型参数未知的被控对象,基于系统的状态变量,通过神经网络辨识被控对象的未知参数,并将被控对象的模型信息提供给自适应反馈控制器。相对于传统的PID控制器,自适应神经网络控制器有更强的鲁棒性。问题描述考虑一个含有未知函数的非线性系统,其状态方程可表示为{x˙=f(x)+Puy=x(1)\_自适应反馈

Centos 6.5 x64 desk 安装 NoVnc_centos6.5 安装 novnc-程序员宅基地

文章浏览阅读711次。QQ交流群:646559931、安装Centos6.5 x64 desk系统,并配置好网络网络配置过程:https://blog.csdn.net/llwy1428/article/details/850497312、下载noVnc文件和websockify工具把下载下的websockify放在noVnc的utils路径下下载地址:https://download.csdn..._centos6.5 安装 novnc

加密算法史-程序员宅基地

文章浏览阅读673次。2019独角兽企业重金招聘Python工程师标准>>> ..._最早出现的加密算法

ubuntu18+kinect v1使用_ubuntu20.04获取kinectv1的点云信息-程序员宅基地

文章浏览阅读578次。Kinect v1深度相机在ubuntu18下的使用开发环境Kinect v1介绍环境准备运行相机开发环境ubuntu18.04+ROS Melodic+Kinect v1Kinect v1介绍环境准备安装freenectsudo apt-get install ros-kinetic-freenect-* rospack profile 安装rqt-image-view显示图像sudo apt-get install ros-kinetic-rqt-image-view运行相机_ubuntu20.04获取kinectv1的点云信息

推荐文章

热门文章

相关标签