用JAVA编写程序时出现数组越界情况,求大神帮忙瞅瞅呀~

用JAVA编写程序时出现数组越界情况,求大神帮忙瞅瞅呀~,第1张

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数组越界问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9784990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存