×

索引超出了数组界限 索引 数组

索引超出了数组界限?c语言数组移位操作

admin admin 发表于2022-04-30 00:02:10 浏览146 评论0

抢沙发发表评论

索引超出了数组界限

1、定义一个int整形类型的数组,初始化10个整数,从1到10;然后循环依次输出11次,由于数组里只有10个数。

2、第11次是抛出了数据越界的错误:java.lang.ArrayIndexOutOfBoundsException。

3、将程序修改一下,保证程序不会非法的运行到第11次,获取数组的长度Array.length;当我们从数组取数时控制在这个长度范围内进行。

4、通过修改,程序得到正确执行。

c语言数组移位操作

思路:

所有数组都移位,那么其中一个元素的值的溢出位将和相邻的元素进行合并,

因此只要记住上一元素的溢出位,在下一元素移动后合并即可。

#define ELEMCNT 3 //定义数组元素个数

char a[ELEMCNT]; //被操作的元素

char exceedA=0,exceedB=0;//记忆溢出位用的变量,其中exceedA为上一元素溢出值,exceedB为本元素溢出值

//定义整体移动函数,其中k为左移位数

void LeftElem(int k){

  int i;

  char Msk=0;//用于计算溢出位的掩码,如k=6时,其掩码值为00000011(二进制)

  for (i=0;i《8-k;i++){

    Msk=Msk|(1《《i);

  } 

  //移动所有数组元素,i值对应数组元素下标i-1

  for (i=ELEMCNT;i》0;i--){

    exceedB=(a[i-1]&(~Msk))》》(8-k);//计算溢出数据

    a[i-1]=a[i-1]《《k+exceedA;

    exceedA=exceedB;

  }}

Java数组有哪些用法

数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组

数据的有点不使用数组定义100个整形变量:int i1;int i2;int i3

使用数组定义 int i;

数组定义:int i;只是一个伪代码,只是表示含义的(1)一维数组

一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,使用java数组,必须经过两个步骤,声明数组和分配内存给该数组,声明形式一声明一维数组:数据类型 数组名=null;非配内存给数组:数组名=new 数据类型[长度];声明形式二声明一维数组:数据类型 数组名=null;-索引

(2)java数据类型分为两大类1.基本数据类型int、long操作的时候本身就是具体的内容引用数据类型:数组、类、接口

引用传递的就是一个内存的使用权,一块内存空间,可能有多个人同时使用

2.事例声明数组

数组的声明格式里,数据类型是数组元素的数据类型,常见的有整形、浮点型、与字符型等数组名是用来统一这组相同数据类型元素的名称,其命名规则和变量的相同数组声明后实际上是在栈内存中保存了此数组的名称,结下了是要在堆内存中配置数组所需要的内存,齐产固定是告诉编译器,所声明的数组要存放多少个元素,而new 则是命令编译器根据括号里的长度。-数组

基本数据类型偶读有其默认值:int 0;只要是引用数据类型默认值就是null事例

声明数组的同时分配内存空间声明数组的同时非配内存数据类型 数组名=new 数据类型[个数]int score=new int;声明一个元素个数为10的整形数组score,同时开辟依靠内存空间工期使用java中,由于整形数据类型占用的空间为4个byte,而整个数组score可保存的元素有10个。所以上例中占用的内存共有4*10=40个字节-索引

(3)数组的访问

数组中元素的表示方法想要访问数组里的元素可以利用索引来完成,java的数组索引标号由10开始,以一个score的整形数组为例,score代表第一个元素一直向下,最后一个为score

(4)取得数组的长度在java中取得数组的长度(也就是数组元素的长度)可以利用数组名称.length完成,数组名称.length--返回一个int类型的数据

(5)数组的静态初始化之前的数组,所采用的都是动态初始化,所有的内容在数组声明的时候并不具体的指定,而是以默认值的形式出现静态初始化是指在数组声明后直接为数组指定具体的内容如果想要直接在声明的时候给数组赋初始值,可以采用大括号完成,只要在数组的生命格式后面加上初值的赋值即可,数据类型 数组名 ={初始值0,初始值1,初始值3,....初始值n};-数组

范例排序,在操作中排序是比较常用的从大到小

这个时候不要被i值所迷惑   if(score[i]》score[j]){

这一步主要知识为了比较,实际上完成之后输出的时候是根据j的值排序的

(6)二维数组

二维数组声明的方式和以为数组的类似,内存分配也一样是用new这个关键字

其实声明与分配内存的格式如下动态初始化数据类型 数组名;数组名=new 数据类型[行的个数][列的个数];

声明并初始化数组数据类型 数组名=new 数据类型[行的个数][列的个数];静态初始化

(7)二维数组的存储声明二维数组score 同时开辟一段内存空间int score=new int;整体数据score可保存的元素是4*3=12个,在java中,int数据类型所占用的空间为4个字节,因此该整形数组占用的内存共为4*12=48个字节事例-索引

(8)二维数组静态初始化

用到的时候才会开辟空间,不用的(红色部分)则不开辟空间多维数组一般只是用到二维数组三维数组简单了解