1

プログラミング試験の紹介のために改訂していますが、以前の試験問題から少し行き詰まっている質問があります。

質問:

線路に沿った駅の位置を表す値を使用して、引数としてdouble配列をとるメソッドを記述します。このメソッドは、引数のステーションの各ペア間の距離を含む2次元配列を返す必要があります。距離の配列には、ステーションのペアごとに1つのエントリのみを含める必要があります(つまり、長方形の配列を使用しないでください)。

質問に対する解決策はありますが、ペアごとに1つのエントリしかないはずの最後のビットを取得できません。ルックアップテーブルを作成して、2つのステーションの距離を確認するためのすべてのエントリを作成することを考えましたが、距離はすでに計算されているため、配列には後のステーションの空のセルがたくさんあります。

これが私の現在の解決策です

//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("");
    }

}

誰かが私を正しい方向に向けることができれば、それは本当にありがたいです。

前もって感謝します。

//編集

@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("");
    }

}
4

1 に答える 1

2

ステートメントが言うことは、「つまり、長方形の配列を使用しない」ということです。アイデアは、ペアごとに1つの値のみを格納することです。たとえば、ペア(a、b)があり、a <bの場合、aとbの間の距離をaの配列に格納しますが、bの配列には格納しません。したがって、最初のステーションの配列のサイズはn-1(他のすべてのステーションまでの距離)になり、2番目のステーションの配列のサイズはn-2(最初のステーションを除く他のすべてのステーション)になります。そのため、アレイは長方形ではなく三角形になります。結局のところ、私にあなたの問題を解決させるのではないので、このヒントで十分だと思います。

于 2012-05-10T10:47:39.663 に答える