为列车线上的所有车站创建距离地图

时间:2012-05-10 10:41:38

标签: java

我正在修改编程考试的介绍,我有一个问题,从以前的考试试卷中我有点坚持。

问题:

  

编写一个方法,该方法将双数组作为参数,其值表示沿轨道的火车站的位置。该方法应返回一个二维数组,其中参数中每对站之间的距离。距离数组应该对每对站只有一个条目(即不使用矩形阵列)。

我有一个问题的解决方案,但我无法得到最后一位,每对应该只有一个条目。我已经考虑过创建一个查找表,将查看所有条目以查看两个站点的距离,然后该阵列将为后面的站点提供大量空单元格,因为已经计算了距离。

这是我目前的解决方案

//Set of locations on the train line
private static double[] stations = {0.0, 2.0, 3.0, 5.0};

//Method to take the array of doubles and create distance map
public static double[][] getDistances(double[] st){
    double[][] distanceMap = new double[st.length][st.length-1];
    int x;
    for(int i=0; i<st.length; i++){
        x=0;
        for(int j=0; j<st.length; j++){
            if(j != i){
                distanceMap[i][x] = Math.abs(st[i]-st[j]); 
                x++;
            }
        }
    }
    return distanceMap;
}

//Main method to get the distance map then loop over results
public static void main(String[] args){
    double[][] arrayMatrix = getDistances(stations);

    for(int i=0; i<arrayMatrix.length; i++){
        for(int j=0; j<arrayMatrix[0].length; j++){
            System.out.print(arrayMatrix[i][j]+"  ");
        }
        System.out.println("");
    }

}

如果有人能指出我正确的方向,我们将非常感激。

提前致谢。

// EDIT

经过@izomorphius的一些很好的建议后,我设法解决了这个问题。谢谢。

这是完整的解决方案

//Set of locations on the train line
private static double[] stations = {0.0, 2.0, 3.0, 5.0};

//Method to take the array of doubles and create distance map
public static double[][] getDistances(double[] st){
    double[][] distanceMap = new double[st.length-1][];
    int size = st.length-1;

    for(int i=0; i<distanceMap.length; i++){
        distanceMap[i] = new double[size];
        size--;
    }

    ArrayList<String> lut = new ArrayList<String>();

    int x;
    for(int i=0; i<distanceMap.length; i++){
        x=0;
        for(int j=0; j<st.length; j++){
            if(j != i && !lut.contains(i+"/"+j)){
                distanceMap[i][x] = Math.abs(st[i]-st[j]); 
                lut.add(i+"/"+j);
                lut.add(j+"/"+i);
                x++;
            }
        }
    }
    return distanceMap;
}

//Main method to get the distance map then loop over results
public static void main(String[] args){
    double[][] arrayMatrix = getDistances(stations);

    for(int i=0; i<arrayMatrix.length; i++){
        for(int j=0; j<arrayMatrix[i].length; j++){
            System.out.print(arrayMatrix[i][j]+"  ");
        }
        System.out.println("");
    }

}

1 个答案:

答案 0 :(得分:2)

声明所说的是“即不使用矩形阵列”。我们的想法是每对只存储一个值。例如,如果你有一对(a,b)和一个&lt; b将a和b之间的距离存储在a的数组中但不存在于b的数组中。因此,第一站的阵列大小为n-1(到所有其他站的距离),对于第二站,其大小为n-2(除了第一站之外的所有其他站),依此类推。因此,您的阵列将是三角形而不是矩形。我希望这个提示已经足够,因为毕竟我的想法是不让我解决你的问题。