【发布时间】:2011-11-08 20:20:05
【问题描述】:
我真的不知道如何描述我的问题,所以我只展示一个代码示例:
int[][][] mat;
int n;
int specificValue;
for (int i = 0; i < n; i++) {
if(mat[i][n-i][3] != specificValue) {
doStuff();
}
}
我正在 3d 数组中查找整数值。对于每个字段,我必须使用其中之一:
- 从零运行到 n 的计数器
- 从 n 到零运行的计数器
- 固定值
所以我尝试构建一个方法,让我免于编写这个 for 循环大约 20 次,但我失败了,所以这就是我需要帮助的地方。我的想法是这样的:
search(Loop.UP, Loop.DOWN, Loop.FIXED);
其中“循环”将是一个枚举,代表我的一种可能性,但我不知道如何实现它,或者这在 Java 中是否可以实现,而无需对所有可能的组合进行硬编码。
希望你能帮忙:)
好的,更具体...通过我的设置,我正在通过这个 3d 数组绘制一个向量,具体来说是一个对角线,我想知道这个向量上的值是什么,并且 仅在这个向量上。
而且由于绘制这样一个向量的可能性不止一种,我希望有一种更通用的方法来获取这些值。我的搜索可以很简单
search(Loop.UP, Loop.FIXED, Loop.FIXED); // one plane
这将是一个带有一个计数器的简单 for 循环,但也是
search(Loop.DOWN, Loop.UP, Loop.UP); // through all three planes
【问题讨论】:
-
您能更具体地说明您想要什么吗?您希望能够在运行时而不是编译时为每个字段指定使用哪种类型的索引?
-
您可以只拥有 (UP, DOWN) 和 (DOWN, UP) 或全部四种组合吗?还有多少个固定值?
-
您能否提供更多示例,说明此代码 sn-p 在“20 次”中可能如何变化?如果它总是以某种方式涉及 n,i,specificValue,你可以省略 Loop.FIXED,并用 specificValue 替换它,你可以传入一个 `int[] counter1 = new int[] { value1, value2 } - 然后在您的函数体中,您可以检查 value1 value2 是否隐式确定它是 Loop.UP 还是 Loop.DOWN。
-
正确的方法是实现你自己的Iterator。这仅在
doStuff不修改比较的值时才有效。是吗? -
doStuff() 不执行与此代码 sn-p 一致的任何操作
标签: java multidimensional-array for-loop