プログラミング試験の紹介のために改訂していますが、以前の試験問題から少し行き詰まっている質問があります。
質問:
線路に沿った駅の位置を表す値を使用して、引数として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("");
}
}