같은 액세스 기능을 당신은해야 삼각형의 한면을 계산하십시오. 복사하거나 공간을 할당하지 않으려 고합니다. x와 y 좌표를 하나의 인덱스로 변환하기 만하면 정사각형 매트릭스의 크기의 절반을 약간 넘는 배열을 가질 수 있습니다. 예를 들면 :
class SymmetricMatrix {
private final double[];
/**
* @param size the size of one dimension of the matrix. eg: 3 for a 3x3 matrix.
*/
SymmetricMatrix(int size) {
matrix = new double[index(size) + 1];
}
private index(int x, int y) {
if (x > y) {
int tmp = x;
x = y;
y = tmp;
}
// now x <= y
i = (y * y + y)/2 + x;
}
public double get(int x, int y) {
return matrix[index(x, y)];
}
public void set(int x, int y, double value) {
matrix[index(x, y)] = value;
}
}
이 예는 두 배 값을 사용하지만 (당신이 객체를 사용하려는 경우, 그것은 일반적인 만들 심지어 나) 당신은 쉽게 그것을 조정할 수 있습니다.
이 그것을 채우려면 :
SymmetricMatrix matrix = new SymmetricMatrix(size);
for (int y = 0; y < size; y++) {
for (int x = 0; x <= y; x++) {
matrix.set(x, y, /* value */);
}
}
다른 사람들이 좋은 답변을했지만, 이것이 내가 필요한 전부였습니다. –