Давайте сначала посмотрим на более простую проблему с 6
людьми. Следующая матрица показывает, кто (строки) говорит, с кем (столбцы), в каком раунде (запись):
Так, например, в В первом раунде (желтый) у нас есть следующие пары:
(1-2), (3-5), (4-6)
blockquote>Для раунда 2 (зеленый) у нас будет:
(1-3), (2-6), (4-5)
blockquote>и т. д.
Таким образом, в основном мы ищем симметричный латинский квадрат (т.е. в каждой строке и в каждом столбце каждая запись появляется только один раз, ср. Латинские квадраты в Википедии ).
Латинский квадрат в квадрате может быть легко сгенерирован с помощью таблицы сложений:
inner_ls <- function(k) { res <- outer(0:(k-1), 0:(k-1), function(i, j) (i + j) %% k) ## replace zeros by k res[res == 0] <- k ## replace diagonal by NA diag(res) <- NA res } inner_ls(5) # [,1] [,2] [,3] [,4] [,5] # [1,] NA 1 2 3 4 # [2,] 1 NA 3 4 5 # [3,] 2 3 NA 5 1 # [4,] 3 4 5 NA 2 # [5,] 4 5 1 2 NA
Таким образом, осталось добавить последнюю строку (столбец) с отсутствующим круглым числом:
[111 ]С этим вы получите свою матрицу назначения следующим образом:
full_ls(18) # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 1 NA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 2 1 NA 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2 # 3 2 3 NA 5 6 7 8 9 10 11 12 13 14 15 16 17 1 4 # 4 3 4 5 NA 7 8 9 10 11 12 13 14 15 16 17 1 2 6 # 5 4 5 6 7 NA 9 10 11 12 13 14 15 16 17 1 2 3 8 # 6 5 6 7 8 9 NA 11 12 13 14 15 16 17 1 2 3 4 10 # 7 6 7 8 9 10 11 NA 13 14 15 16 17 1 2 3 4 5 12 # 8 7 8 9 10 11 12 13 NA 15 16 17 1 2 3 4 5 6 14 # 9 8 9 10 11 12 13 14 15 NA 17 1 2 3 4 5 6 7 16 # 10 9 10 11 12 13 14 15 16 17 NA 2 3 4 5 6 7 8 1 # 11 10 11 12 13 14 15 16 17 1 2 NA 4 5 6 7 8 9 3 # 12 11 12 13 14 15 16 17 1 2 3 4 NA 6 7 8 9 10 5 # 13 12 13 14 15 16 17 1 2 3 4 5 6 NA 8 9 10 11 7 # 14 13 14 15 16 17 1 2 3 4 5 6 7 8 NA 10 11 12 9 # 15 14 15 16 17 1 2 3 4 5 6 7 8 9 10 NA 12 13 11 # 16 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 NA 14 13 # 17 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NA 15 # 18 17 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 NA
Если я правильно понимаю, вы хотите иметь несколько JPanels
, только один из которых отображается одновременно? Если это так, похоже, что CardLayout
- это то, что вам нужно. Вы в основном добавляете к нему все свои JPanel
с уникальными именами, а затем можете указать CardLayout
, какие из них показывают .
Я думаю, что CardLayout, вероятно, то, что вам нужно, но если что-то вроде использования памяти вызывает беспокойство и вы действительно хотите удалить и добавить новый JPanel / Component, вам необходимо удалить старый JPanel и добавить новый (с соответствующими ограничениями и / или индексом в зависимости от макета). После переключения вам потребуется validate () на панели содержимого.