В Java нет способа создавать такие переменные во время выполнения.Они должны быть названы заранее во время компиляции.Таким образом, вы не можете принять тот подход, с которого начинали.При этом у вас, безусловно, есть правильная идея - создать массив, состоящий из массивов в каждом слоте.
Как уже говорили другие, вы ищете 2-мерный массив.Фразируя это по-другому, вы ищете массив массивов.Вы можете представить одномерный массив как набор отдельных слотов, каждый из которых может хранить в себе одно значение.2D-массив - это место, где каждый отдельный слот содержит в себе другой массив.
Доступ к каждому массиву так же прост, как итерация каждого значения в массиве, а затем итерация каждого значения этого подмассива.Другими словами:
- Выделить новый массив в i-м слоте (с соответствующим размером для этого массива)
- Создать цикл for (от 0 -> размер нового массива)
- Добавление новых значений в i-е по j-му значению (Arr [i] [k] = x)
Более подробное объяснение можно найти здесь который предоставляет очень полезное изображение для изображения того, как выглядит массив массивов, а также некоторые примеры кода.
Читая ваши изменения, кажется, что вы хотите, чтобы они назывались как отдельные одномерные массивы.Несмотря на то, что невозможно назвать новые переменные во время выполнения таким образом, вы можете просматривать каждый массив в 2D-массиве как отдельную строку.
Я предлагаю посмотреть, можете ли вы реорганизовать свой код, чтобы получить метод, который будет принимать одномерный массив и выполнять любую необходимую вам обработку.
Сначала метод обработки массива 1D:
/**
* Prints each value x^2 in the given row
*/
private static void processRow(int[] row) {
for (int x : row) {
System.out.println("x^2 = " + (x*x));
}
}
Как только вы это сделаете, вы можете обработать отдельную строку в вашем 2D-массиве следующим образом:
public static void main(String[] args) {
int[][] table = new int[10][10];
// Allocate table with real values
for (int[] row : table) {
processRow(row);
}
}