我试图在处理过程中制作一个小型射击游戏,当我单击鼠标按钮时,我创建一些沿着屏幕移动的子弹,当它们离开屏幕时,它们应该消失,我使用一个IntList
在其中保存这样的值:(X1,Y1,X2,Y2,…)
,我的问题是,当我在下面的代码中尝试删除项目符号的索引时,我会随机得到一个ArrayIndexOutOfBounds:10
异常,即使我在删除之前检查了IntList的大小。有什么帮助吗?
for(i = 1; i < shots.size(); i += 2){
shots.sub(i, bullet_speed);
if(shots.get(i) + bullet_height <= border_size){
shots.remove(i); //Problematic point
println("Removed Y-pos, array's size: "+shots.size());
shots.remove(i - 1);
println("Removed X-pos, array's size: "+shots.size());
i -= 2;
continue;
}
rect(shots.get(i - 1), shots.get(i), bullet_width, bullet_height);
}
编辑:
我想我找到了一条线索:当我达到屏幕上有5个子弹时,异常总是会发生(此时,子弹的大小变成了10)。
这实际上很有趣,因为我认为IntList是动态的,因为ArrayList据说来自处理留档,正如这里的描述下所看到的,正如@Eran所建议的那样,我移动到ArrayList进行测试,然后在Java文档中,我发现我的初始声明镜头=new IntList();
我认为是变量,实际上是一个声明,初始容量为10,如这里所述,所以这就是为什么我得到了ArrayIndexOutOfBound: 10
异常,现在我用声明解决了镜头=new IntList(20);
更改:
for(i = 1; i < shots.size(); i += 2){
到:
for(i = 0; i < shots.size(); i += 2){
列表的索引从0开始,而不是从1开始。既然你每次提高2,那就超出了i的范围
我的ArrayIndexOutOfBounds 8出现错误,我不确定原因-我的图像从0开始。行处理似乎突出显示为
问题内容: 也许我一直在研究这个问题已经很久了,因为我找不到问题,但是应该很简单。我在行上收到ArrayIndexOutOfBounds异常: 谁能看到原因? 谢谢! 问题答案: 数组索引从到。 因此,数组的典型循环构造为: 在您的情况下,您需要向前看一个位置,因此,为了避免越界,您需要将该循环限制为一个位置: 如果将索引的作用域置于循环外部,则在循环之后,它将具有正确的值来分配最后一个:
问题内容: 我有一个生成器和一个使用它的函数: 如果生成器引发异常,我想在使用者函数中处理该异常,然后继续使用迭代器,直到耗尽为止。请注意,我不想在生成器中有任何异常处理代码。 我想到了类似的东西: 但这对我来说看起来很尴尬。 问题答案: 这也是我不确定是否正确/优雅处理的事情。 我要做的是从生成器中获取一个,然后将其提升到其他位置。喜欢: 这样,我仍然继承了Exception而没有引发它,这将导
让我们考虑一个<代码>父< /代码>类,它只包含一个<代码>整数< /代码>属性。我用一个空变量创建了6个父类对象。然后我将这些对象添加到列表中。 我想通过属性的值检索相应的对象。我使用了Java8流。 但是我得到了,所以我编辑了代码: 但是如果任何对象为null,我想抛出一个异常。如果列表中没有对象为null,那么我想从列表中检索相应的对象。 如何使用Java 8 Streams使用一条语句实现
引入异常处理 尽管只有寥寥几行代码,我们却已经实现了可工作的半协程调度器(缺失异常处理)。 没关系,下面先rollback回return的实现,开始引入异常处理,目标是在嵌套生成器之间正确向上抛出异常,跨生成器捕获异常。 <?php // 为Gen引入throw方法 class Gen { // PHP7 之前 关键词不能用作名字 public function throw_(\
这是我的堆栈代码的数组实现: 这是OverFlowException类: 当我运行这个编译器时给出错误“exception OverFlowException is never thrown in body of response try statement” 然后我意识到我没有包含检查数组是否为isFull()的部分。 我的问题是我在ArrayStack2类中有isFull()方法,以及如何从O