在Java中迭代数组(从2D数组中推导出1D)

时间:2012-12-11 00:18:58

标签: java arrays for-loop iteration path-finding

我正在尝试编写一段Java代码,它可以从2D整数数组中推导出一维整数数组。我的2D数组看起来像这样:

Node1  Node2   Path
 6      8      501
 2      6      500 
 8      10     505 
 2      4      502

我的任务如下。我想从第一列(节点1)的元素到第二列(Node2)的元素找到" Path"我的意思是这样的:

" 2"至" 8"将按此顺序500 501。来自" 2"到" 4"将是502(不是500,因为它终止于" 6")

我一直试图通过迭代简单的for循环来实现这一点,但一直在努力。有人可以告诉我如何解决这个问题吗?

我想写的代码片段是:

            PathSequence:
            for(int i = 0; i < PathGraphRow; i++){
                if(PathGraph[i][0] == source){
                    if(i==0)
                    {
                        nextNode = PathGraph[i][1];
                        resultantPaths[counter] = PathGraph[i][2];
                        prev = lightPathGraph[i][2];
                        if(nextNode == dest){
                            break PathSequence;
                        }
                        counter++;
                    }else if(i > 0 && prev != PathGraph[i][2])
                    {
                        nextNode = PathGraph[i][1];
                        resultantPaths[counter] = PathGraph[i][2];
                        prev = PathGraph[i][2];
                        if(nextNode == dest){
                            break PathSequence;
                        }
                        counter++;
                    }
                }

                if(nextNode == PathGraph[i][0] && prev != PathGraph[i][2]){
                    nextNode = PathGraph[i][1];
                    resultantPaths[counter] = PathGraph[i][2];
                    prev = PathGraph[i][2];
                    if(nextNode == dest){
                        break PathSequence;
                    }
                    counter++;                    
                }

                if(i == PathGraphRow-1 && PathGraph[i][2] != resultantPaths[counter]){
                    if(PathGraph[i][1] != dest){
                        resultantPaths = new int[PathCount];
                    }
                }

            }        
    }

谢谢。

此致

1 个答案:

答案 0 :(得分:0)

除非我忽略了一些细节,否则如果没有子路径,问题就显得微不足道了。你只需要一个非常具体的for循环。

 for (int i = 0; i < columns; i++)
 {
      Path path = new Path(array[i][0], array[i][1], array[i][2]);
      pathsArray.Add(path);
 }

这当然是伪代码,但基本上我会这样做。我会把每条路都变成三元组。我仍然不太明白你打算如何存储数据,如果你把所有值都放在1D int数组中,你怎么知道路径的起点和终点?假设所有路径都由一个1D阵列中起作用的起点,终点和结果定义,尽管使用它比2D阵列更糟糕。如果路径具有任意长度,则无法将数据存储在一维数组中。无论如何,这里的代码将表格放在一维数组中(假设没有更大的复杂性);

int[] paths = new int[2dArray.length * 3];
int mapper = 0;

for (int i = 0; i < 2dArray.length; i++)
{
     paths[mapper] = 2dArray[i][0];
     paths[mapper + 1] = 2dArray[i][1];
     paths[mapper + 2] = 2dArray[i][2];
     mapper += 3;
}

然后要访问数组,你需要做一堆mod 3垃圾来知道你得到的值......

 if (index % 3 == 0)
    //path start
 else if (index % 3 == 1)
    //path end
 else if (index % 3 == 2)
    // result of path