Java 数组 : how to ensure the semantic correctness of indexes used?

标签 java arrays correctness

我有以下情况:

final int I  = 10;
final int MU = 100;
final int P  = 100;

int[][] a = new int[I][MU];
int[][] b = new int[I][P];

for(int i = 0; i < I; i++) {
  for(int mu = 0; mu < MU; mu++) {
    for(int p = 0; p < P; p++) {
      a[i][mu] = ... // something
      b[i][p]  = ... // something
    }
  }
}

正如您所看到的,我使用了多个具有相同维度但运行在不同索引上的数组。在此代码中,以下错误可能会导致ArrayIndexOutOfBoundsException ,自 mu范围大于 i :

a[mu][i] = ...

原则上我可以捕获这个错误。但是,以下错误更难捕获:

b[i][mu] = ...

这里不会出现运行时异常,因为 mup 具有相同的范围。不过,这个错误确实会导致代码中出现语义问题。

最后,我的问题是:以数组 a 的方式对这些数组进行编程的最佳方法是什么?只能使用正确的索引进行访问(在本例中为 imu)?

谢谢!

最佳答案

听起来您确实应该更好地封装数据。每当您有两个大小始终相同的集合时,请考虑更改为由一个组成它们的某种类型的集合。

我们无法真正判断您的类型代表什么(提示:使用更有意义的名称),但如果您有一个类:

class Foo {
    private final int[] a = new int[MU];
    private final int[] b = new int[P];

    ...
}

那么你可以:

Foo[] foos = new Foo[I];

此时数组的结构非常清楚 - 你不太可能做错事,因为你会有一个循环,例如:

for (int i = 0; i < foos.length; i++) {
    Foo foo = foo[i];
    // Use foo
}

我还鼓励您使用增强的 for 循环:

for (Foo foo : foos) {
    ...
}

关于Java 数组 : how to ensure the semantic correctness of indexes used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795829/

相关文章:

c - 带返回值的 Switch 语句——代码正确性

java - Mockito 验证一个方法在 spy 之后被调用一次,尽管它永远不会被调用

java - 从数组中删除元素(Java)

Javascript: trim 数组中字符串的长度

javascript - 将一本字典与字典数组进行比较

ruby - 用 `Array.new(n, Array.new)` 创建矩阵

algorithm - 您在软件模型检查方面有何经验?

python - argparse 在代码中的位置

java - 如何从 JSP/Java 中的 double 中获取整数和小数部分?

java - 为什么groovy给每个类添加打印方法?