Я понимаю эту проблему и решения на всем протяжении StackOverflow like here, однако я все еще не могу выполнить эту работу.Невозможно преобразовать значения массива 1d и 2d
Большинство примеров говорят, что мне просто нужно умножить строку по ширине и добавить столбец, что означает, что место (4, 3) в квадратной сетке 4x4 станет (3 * 4 + 4) или 16. Итак это так хорошо.
Примеры говорят, чтобы вернуть координаты, я должен разделить индекс на число строк для x и получить по модулю индекс для y. В приведенном выше примере это должно быть ...
int x = 16/4;
int y = 16 % 4;
Но это работает для некоторых значений, а не для других. В этом случае, когда я возвращаю координаты после преобразования в индекс, я получаю (4,0). Это имеет смысл, так как 4 равномерно распределяется по 16, поэтому я должен упустить что-то основное.
Вот некоторый тестовый Java-код, который я создал, пытаясь понять это. Я должен упомянуть, что индексирование началось с 1, поэтому первый квадрат в верхнем левом углу равен 1,1, а последний квадрат - 4,4.
public class Test {
int size;
public Test(int size) {
this.size = size;
}
public int toIndex(int x, int y) {
return x * this.size + y;
}
public int[] toCoordinates(int index) {
int coordinates[] = new int[2];
coordinates[0] = index/this.size;
coordinates[1] = index % this.size;
return coordinates;
}
public static void main(String[] args) {
int testSize = 4;
Test test = new Test(testSize);
for (int i = 1; i <= testSize; i++) {
for (int j = 1; j <= testSize; j++) {
int index = test.toIndex(i, j);
int coordinates[] = test.toCoordinates(index);
System.out.println(index + " == " + coordinates[0] + "," + coordinates[1]);
}
}
}
}
Выход текущего кода
5 == 1,1
6 == 1,2
7 == 1,3
8 == 2,0
9 == 2,1
10 == 2,2
11 == 2,3
12 == 3,0
13 == 3,1
14 == 3,2
15 == 3,3
16 == 4,0
17 == 4,1
18 == 4,2
19 == 4,3
20 == 5,0
Верхний левый - 0,0, нижний правый - 3,3. 0 - это первое число! – Nitram
Я предполагаю, что ваше замешательство связано с использованием 1-индексированных массивов. Java использует 0-индексированные массивы, и я настоятельно рекомендую вам сделать то же самое. –
Вот и все! Мне просто нужно было добавить 1 к размеру при выполнении вычислений. – Jim