【问题标题】:Java Applet - ArrayIndexOutOfBoundsException (pt 2)Java 小程序 - ArrayIndexOutOfBoundsException (pt 2)
【发布时间】:2010-05-31 20:24:43
【问题描述】:

我解决了我之前的问题。但是现在在我的瓦片地图上...如果我尝试向右移动 9 个瓦片,并尝试到达第 9 个瓦片......我会收到此错误:

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 8
    at tileGen.blocked(tileGen.java:125)
    at tileGen.keyPressed(tileGen.java:58)
    at java.awt.Component.processKeyEvent(Component.java:6221)
    at java.awt.Component.processEvent(Component.java:6040)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
    at java.awt.Component.dispatchEventImpl(Component.java:4502)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

这里是代码:http://www.so.pastebin.com/hYkpQf13

我尝试了很多解决方案,但都失败了。

【问题讨论】:

  • 我看到很多 System.out.println(),你能显示那个输出的(最后)行吗?

标签: java arrays applet indexoutofboundsexception


【解决方案1】:

我认为问题在于您混淆了坐标。你使用 X 作为 left-right 坐标和 Y 作为 up-down,当它应该是相反的时候(或者你应该镜像你的板)。 p>

向右移动时,您增加 X,在您的板上,这意味着您有效地移动了一行向下。由于棋盘有 8 行,第 9 步将带您出界。

【讨论】:

  • 另一件事......你认为有更好的方法来阻止瓷砖吗?那样就可以只是一种方法而且简单吗?
  • @Dan,我现在对此没有任何明智的见解。我会保留blocked 的原样,对我来说它使代码更具可读性。 OTOH 以这种形式对我来说,测试表达式看起来更简单、更易读:if (!blocked(x1,y1)) - 但这是一个小问题。
猜你喜欢
  • 2011-03-14
  • 2015-11-09
  • 1970-01-01
  • 2019-10-16
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多