0

我有以下情况:

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这种情况下)访问?

谢谢!

4

1 回答 1

2

听起来你真的应该更好地封装你的数据。任何时候您有两个大小始终相同的集合,请考虑更改为具有组成它们的某种类型的集合

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

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) {
    ...
}
于 2013-04-03T19:07:21.057 回答