Java小程序-ArrayIndexOutOfBoundsException
好的,我有一个小程序,可以让玩家在两个平铺之间移动他的32x32角色。。。任何时候他在地图的边缘然后移动到任何其他地方。。。我得到一个ArrayIndexOutOfBounds异常。此外,当这种情况发生时,角色可以穿过阻止的平铺!但是,这仅发生在东边缘和南边缘,但在南边缘,角色在离开边缘时无法穿过阻止的瓷砖 我不知道怎么解决这个问题,也许你能帮我 这是一张我解释问题的照片: 代码如下: /**瓷砖发电机程序员:丹J。 感谢:g00se,pbl,Manny。起动 2010年5月23日 **/ 导入java.awt。;进口 java.awt.event。;进口 applet.applet;导入java.io。; 导入java.util 公共类tileGen扩展小程序 实现KeyListener{ Image[]tiles;//tile数组图像 播放器;//播放器图像int x,y,px, py,tx,ty;//x平铺-y平铺// 玩家x-玩家y//平铺x-平铺y 布尔左,右,下,上, canMove,respawn;//为真?int[][] board;//用于最终目的的行瓷砖 地图体验!最终整型 NUM_TILES=33;//有多少个TILES 我们实现了?标签lx,ly;//到 看看我们在哪!int r1,r2, u1、u2、l1、l2、d1、d2 int lastX、lastY、row、col;标签 lbl1,lbl2,p1,p2 公共void init(){ board=载重板() //我们的球员 addKeyListener(此); canMove=true; int-x=4; int-spawnY=4; px=0; py=0; lastX=0; lastY=0; lbl1=新标签(“LastX”,左标签); lbl2=新标签(“LastY”,左标签) =lastY+1;}其他{d2=0;}Java小程序-ArrayIndexOutOfBoundsException,java,arrays,applet,Java,Arrays,Applet,好的,我有一个小程序,可以让玩家在两个平铺之间移动他的32x32角色。。。任何时候他在地图的边缘然后移动到任何其他地方。。。我得到一个ArrayIndexOutOfBounds异常。此外,当这种情况发生时,角色可以穿过阻止的平铺!但是,这仅发生在东边缘和南边缘,但在南边缘,角色在离开边缘时无法穿过阻止的瓷砖 我不知道怎么解决这个问题,也许你能帮我 这是一张我解释问题的照片: 代码如下: /**瓷砖发电机程序员:丹J。 感谢:g00se,pbl,Manny。起动 2010年5月23日 **/
right = true; left = true; up =
正确;向下=正确
尝试{if(阻塞(r1,r2)==true)
right=false;//我们不能向右走
如果(阻塞(u1,u2)=真)向上=
false;//如果
(阻塞(l1,l2)=真)左=假;
//我们不能向左走
(阻塞(d1,d2)=真)向下=假;
//我们不能下去
}catch(ArrayIndexOutOfBoundsException
dap){System.out.println(“数组索引
超出范围…:(\n)+
dap.getCause());}
right = true; left = true; up =
if(left==true){if
(e.getKeyCode()==KeyEvent.VK_左){
左=真;
px=px-32;
lastX=lastX-1;}
right = true; left = true; up =
if(right==true){if
(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
右=真;
px=px+32;
lastX=lastX+1;}
right = true; left = true; up =
if(down==true){if
(e.getKeyCode()==KeyEvent.VK_DOWN){
向下=真;
py=py+32;
lastY=lastY+1;}
right = true; left = true; up =
如果(向上==真){
KeyEvent.VK_UP){
向上=真;
py=py-32;
lastY=lastY-1;}
right = true; left = true; up =
字符串txtrastx=
整数.toString(px);
lbl1.setText(txtLastX)
弦成形术=
整数.toString(py);
lbl2.setText(txtrasty)
字符串txtLastX1=
整数.toString(lastX);
p1.setText(txtLastX1)
字符串txtrastx2=
整数.toString(lastY);
p2.setText(txtLastX2);重新绘制()
}公共无效密钥已释放(KeyEvent
(e){
}//忽略公共空间
keyTyped(KeyEvent e){}//ignore
公共空间涂料(图g){
g、 drawImage(播放器,0,0,此);System.out.println(“重生!”);
respawn=false;} }//结束绘制方法
public void update(Graphics g)
{
paint(g);
}
public int[][] loadBoard() {
int[][] board = {
{ 2,2,24,24,24,24,24,1,3,0,0,0 },
{ 2,2,24,23,23,23,24,1,3,0,0,0 },
{ 1,1,24,23,23,23,24,1,3,3,3,1 },
{ 1,1,24,24,23,24,24,1,1,1,1,1 },
{ 1,1,1,1,7,1,1,1,1,1,1,1 },
{ 5,1,1,1,7,7,7,7,7,1,1,1 },
{ 6,1,3,1,1,1,3,1,7,7,7,1 },
{ 6,1,3,1,3,1,1,1,1,1,7,3 }
}; return board;
}
公共布尔阻塞(int-tx,int-ty)
{返回
分块瓷砖。包含(板[ty][tx]);
}
right = true; left = true; up =
公共布尔值IsInBond(int r,int
(c){
返回(r>=0)&&(r<8)&&(c>=12)&&(c<1);}
right = true; left = true; up =
}//结束这件事
如果这个问题得到解决,这将使我非常不悲伤-D我确定问题出在地图板的瓷砖上…:\我猜
谢谢,
丹我引述:
if (lastX > 0) { r1 = lastX + 1;
}else{ r1 = 0; } r2 = lastY;
u1 = lastX; if (lastY > 0) { u2 = lastY - 1; }else{
u2 = 0;
}
如果X已经大于0,则仅递增X?我想你应该确保它小于x的最大允许值
编辑:更多详细信息:
这是您右转的支票:
if (lastX > 0) { r1 = lastX + 1;
}else{ r1 = 0; } r2 = lastY;
u1 = lastX; if (lastY > 0) { u2 = lastY - 1; }else{
u2 = 0;
}
…这是你向左转的支票:
if (lastX > 0) { l1 = lastX - 1;
}else{ l1 = 0; } l2 = lastY;
在这两种情况下你都在检查同一件事!这在逻辑上肯定是错误的。事实上,第一个检查是你让异常正常运行的原因:你问向左走是否安全,然后你向右走 一,。给出异常的堆栈跟踪。2.只给出代码的相关部分-即异常发生的行附近。每当我添加.printStackTrace时,我都会得到错误“void is not allowed”或是一些…一堆编程风格的质疑:
如果。。。入站()。。。“你出局了!”
——听起来像是逆向逻辑。根据通常的定义,如果你在范围内,你就没有脱离网格。此外,所有的==true
都是不必要的。您可以将if(right==true)
替换为if(right)
,将if(respawn==false)
替换为if(!respawn)
@Dan-我们可以找出导致编译错误的原因!!我是说斯蒂芬。。。printStackTrace错误发生在java小程序框架上@卡尔。。。我知道。。。但我还是不明白你可能的答案。很抱歉,这对我来说毫无意义。对不起,英语不是我的第一语言(但是你建议我做什么?@Dan-再试一次。这对我来说很有意义。“但是你建议我做什么?”。他的第二句话解释了这一点。请看我的编辑。如果没有帮助,那就学着更仔细地工作。@Carl-“…学着更仔细地工作”…同意。我的印象是OP的代码考虑得很差,实现得也很差;例如格式很糟糕。