Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序-ArrayIndexOutOfBoundsException_Java_Arrays_Applet - Fatal编程技术网

Java小程序-ArrayIndexOutOfBoundsException

Java小程序-ArrayIndexOutOfBoundsException,java,arrays,applet,Java,Arrays,Applet,好的,我有一个小程序,可以让玩家在两个平铺之间移动他的32x32角色。。。任何时候他在地图的边缘然后移动到任何其他地方。。。我得到一个ArrayIndexOutOfBounds异常。此外,当这种情况发生时,角色可以穿过阻止的平铺!但是,这仅发生在东边缘和南边缘,但在南边缘,角色在离开边缘时无法穿过阻止的瓷砖 我不知道怎么解决这个问题,也许你能帮我 这是一张我解释问题的照片: 代码如下: /**瓷砖发电机程序员:丹J。 感谢:g00se,pbl,Manny。起动 2010年5月23日 **/

好的,我有一个小程序,可以让玩家在两个平铺之间移动他的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;}

  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的代码考虑得很差,实现得也很差;例如格式很糟糕。