int m;
int n;
int i;
int j;
到这里,m n都没有值,下面就去建立数组,当然会有问题啊!
int[][] a=new int[m][n];
int[] b=new int[n];
1:在你声明一个nian[]数组时出的错误。
2:在声明一个对象时,涉及到JAVA的栈内存和堆内存。
可以这么理解,栈内存中存放这这个对象的引用,相当于C语言中的指针,这个对象的引用指向了堆内存中的
一块地址,这块堆内存中的地址才是对象存放的真正地址,栈内存中的这个指针只起到一个索引的作用。
3:再简单点讲:我们通常声明一个对象,比如int[] k = new int[5],在声明k这个数组时,一共做了三件事情:第一件:int[] k 表示在栈内存中存放了一个k;第二件:new int[5] 在堆内存中开辟了一块内存空间,大小是一个拥有5个元素的数组的大小;第三件:一个“=” ,表示将栈内存的k指向了堆内存的那块空间。
之后在对数组k进 *** 作时,代码上看是对K进行 *** 作,实际上是对k所指向的那块堆内存进行的 *** 作。
4:再回来理解nullpointerexception这个错误,只从字面上翻译:null是空的 没有的意思,pointer是指针,指向的意思,合起来就是没有指向的意思,也就是说这个指针指向的那块堆内存地址为空所报的错误。
5:回来看String[] nian = null 就很好理解了:在栈内存中的nian所指向的堆内存为空,所以报空指针错误了呗。改成 String[] nian = new String[5]就行了被。
同志,你这题有很大的问题。
先不说逻辑问题。 说你数组的越界问题。
第一:
最后面的 if (i > alsize()) { i = 0; }
要放在 if (((Monkey)alget(i))num % 3 == 0) { alremove(i); }
前面。
你想象看。如果反过来,先i++,那i超过了size,怎么处理,没有处理就运行alget(i)是不是越界了。
第二,反过来还不行。
你写的是 if (i > alsize()), 你要知道数组是从0开始数的,如果size等于3,其实只有0,1,2。 当i=alsize()时 alget(i)行不行?是不是也过界了。
所以要 i>=alsize()
最后,即使你这样子改了,还是没有结果的,会不断运算。
你拿张纸写一下,你al里的3个类num是多少,都是1,alget(i),随便哪个,num%3都是1%3,能等于0么? 不等于0,就不能remove,始终循环。
如果您使用的是原始类型,如int,长,字符,短,字节,浮点型,双和字符数组字符串数组,数组的一次声明的大小是固定的,不能元素的主题下,唯一可以删除某些底层的元素被改变的重新分配
一个[指数] =新的价值。
如果作为容器类,如列表的数组,ArrayList的是从集合继承。该接口定义了指定的元素集合
的单个实例中删除的布尔删除(对象o)。那么它的所有子接口也有这种方法。
因为java数组的下标从0开始,所以java数组最后一个元素的下标是arraylength-1,一共arraylength个元素
因此,sort方法的for循环中,当i=0时array[arraylength-i]等于array[arraylength]下标越界,把sort方法的for循环中的两个array[arraylength-i]改成array[arraylength-1-i]就行了
以上就是关于用JAVA编写程序时出现数组越界情况,求大神帮忙瞅瞅呀~全部的内容,包括:用JAVA编写程序时出现数组越界情况,求大神帮忙瞅瞅呀~、java数组越界、java数组越界问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)