java applet - 数组检查

发布于 2024-09-04 01:06:23 字数 247 浏览 5 评论 0原文

好的,我的代码在这里: http://www.so.pastebin.com/m7V8rQ2n

我想知道什么...假设我有一个可以在图块上重绘的图像...有没有办法检查未来的图块,这样我就不会超出已定义的图块地图的范围?

就像如果我在地图的边缘......它不会让我过去?

谢谢。

OK so my code is here: http://www.so.pastebin.com/m7V8rQ2n

What I want to know... let's say I have an image which I can redraw on tiles... is there a way to check for future tiles so I DON'T go out of bounds of my already defined tile map?

Like if I were at the edge of a map... it would NOT let me go past it?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

献世佛 2024-09-11 01:06:23

一般来说,只需确保索引在界限内即可防止 ArrayIndexOutOfBoundsException。

JLS 10.4 数组访问< /h3>

所有数组都是 0 原点。长度为 n 的数组可以通过整数 0n-1 进行索引。

因此,像这样的简单检查是非常典型的:

if (i >= 0 && i < arr.length) {
    System.out.println(arr[i]);
}

除非像 arr 在检查和访问之间重新分配这样令人讨厌的事情,上面的代码将永远抛出 ArrayIndexOutOfBoundsException< /代码>。


二维数组“板”

通常,您可以更加具体,例如,当您将矩形“板”存储在二维数组(或者更确切地说,Java 中的数组的数组)中时。

final int M = 10;  // height, i.e. number of rows
final int N = 8;   // width, i.e. number of columns
final int[][] board = new int[M][N];

然后您可以使用如下方法:

boolean isInBound(int r, int c) {
    return (r >= 0) && (r < M) && (c >= 0) && (c < N);
}

绑定检查更易于阅读和编写,因为我们知道我们有一个 MxN 板。如果 isInBound(r, c),则 board[r][c]永远抛出 ArrayIndexOutOfBoundsException

Generally speaking, preventing ArrayIndexOutOfBoundsException can be done by simply making sure that the index is within the bound.

JLS 10.4 Array Access

All arrays are 0-origin. An array with length n can be indexed by the integers 0 to n-1.

Thus, a simple check like this is quite typical:

if (i >= 0 && i < arr.length) {
    System.out.println(arr[i]);
}

Barring nasty things like arr getting reassigned between the check and the access, the above code will NEVER throw ArrayIndexOutOfBoundsException.


2D array "boards"

Often, you can be a lot more specific, e.g. when you have rectangular "boards" stored in a two-dimensional array (or rather, array of arrays in Java).

final int M = 10;  // height, i.e. number of rows
final int N = 8;   // width, i.e. number of columns
final int[][] board = new int[M][N];

Then you can have a method like the following:

boolean isInBound(int r, int c) {
    return (r >= 0) && (r < M) && (c >= 0) && (c < N);
}

The bound check is both easier to read and to write, since we know that we have an MxN board. If isInBound(r, c), then board[r][c] will NEVER throw ArrayIndexOutOfBoundsException.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文