Java在循环中选择变量

时间:2014-01-12 23:41:22

标签: java variables loops

我想知道是否有更有效的方法在循环中选择变量。以下代码我的工作原理,但如果可能,我希望有更好的方法。

Map<Character, Character> axes = new HashMap<Character, Character>();

(...)

for (int w = 0; w < image.getWidth(); w++) {
    for (int h = 0; h < image.getHeight(); h++) {
        for (int d = 0; d < depth; d++) {
            int x = axes.get('x') == 'w' ? w : (axes.get('x') == 'h' ? h : d);
            int y = axes.get('y') == 'w' ? w : (axes.get('y') == 'h' ? h : d);
            int z = axes.get('z') == 'w' ? w : (axes.get('z') == 'h' ? h : d);

            (...)

        }
    }
}

在上面的内容中,我需要将图像的某些坐标分配给具有深度的3D坐标,但是它使用的边根据其面向的方向而改变。是否有更快的方法来执行代码而不必单独生成循环?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

int[] coords = new int[3];
int width = image.getWidth();
int height = image.getHeight();
for (coords[0] = 0; coords[0] < width; ++coords[0])
{
    for (coords[1] = 0; coords[1] < height; ++coords[1])
    {
        for (coords[2] = 0; coords[2] < depth; ++coords[2])
        {
            int x = coords[x_idx];
            int y = coords[y_idx];
            int z = coords[z_idx];
            …
        }
    }
}

答案 1 :(得分:0)

您可以将axes.get(...)次呼叫移出循环。它应该足够快。如果它仍然太慢,也要在循环外部进行逻辑并在内循环中进行切换:

final char xaxis = axes.get('x');
final char yaxis = axes.get('y');
final char zaxis = axes.get('z');
final int  mode  = xaxis == 'x' && yaxix == 'y' ? 1 : ....

然后

           switch (mode) {
             case 1: x = w; y = h; z = d; break;
             case 2: ...
           }
           // work with x,y,z