#java #arrays #string #combinations #permutation
#java #массивы #строка #комбинации #перестановка
Вопрос:
Я должен извлечь все комбинации символов «A, B, C, D, E, F, G», а затем объединить это с днями недели, чтобы в результате:
Monday AB
Tuesday AC
Wednesday AD
Thursday AE
Friday AF
Saturday AG
Monday BA
Tuesday BC
Wednesday BD
....
Logrea создает комбинацию символов, но я не могу объединить с днями, я был бы очень признателен за помощь.
циклы while, массивы и for.
public class daysP {
public static void main(String[] args)
{
String[] elements = "A,B,C,D,E,F,G".split(",");
int r = elements.length;
combination(elements, "",2, r);
}
private static void combina(String[] elem, String act, int n, int r) {
String[] di=new String[5];
days[0]="Monday";
days[1]="Tuesday ";
days[2]="Wednesday";
days[3]="Thursday";
days[4]="Friday";
days[5]="Saturday";
if (n == 0) {
for (int x=0;x<7;)
{
System.out.println(days[x] act);x ;
}
}
else {
for (int i = 0; i < r; i ) {
if (!act.contains(elem[i]))
combina(elem, act elem[i] "", n - 1, r);
}
}
}
}
ожидаемый результат:
Monday AB
Tuesday AC
Wednesday AD
Thursday AE
Friday AF
Saturday AG
Monday BA
Tuesday BC
Wednesday BD
..............
до GF
, которое было бы последней комбинацией
фактический результат:
MondayAB
Tuesday AB
Комментарии:
1. Пожалуйста, исправьте отступ в вашем коде для облегчения понимания
2. Java знает названия дней на многих языках. Используйте
DayOfWeek.getDisplayName()
.3. Кажется, что комбинации буквы с самой собой, такие как
AA
,BB
и т.д., Должны быть пропущены. Правильно ли я это понял? И воскресенье тоже следует пропустить?4. да, повторяющиеся комбинации, такие как AA BB, также пропускаются
Ответ №1:
Мы можем сгенерировать этот вывод с помощью двойного цикла. Логика ниже заключается в том, что мы используем отдельные индексы для первой и последней букв, а также для дня недели, который выводится на печать. Мы используем mod counter
переменной, чтобы определить, какой день будет напечатан, поэтому этот счетчик охватывает каждый из шести дней в вашей определенной неделе.
String[] days = new String[6];
days[0] = "Monday";
days[1] = "Tuesday";
days[2] = "Wednesday";
days[3] = "Thursday";
days[4] = "Friday";
days[5] = "Saturday";
int NUM_CHARS = 7;
int counter = 0;
for (int i=0; i < NUM_CHARS; i) {
String first = Character.toString((char)(i 65));
for (int j=0; j < NUM_CHARS; j) {
if (i == j) continue;
String second = Character.toString((char)(j 65));
String day = days[counter % days.length];
counter;
System.out.println(day " " first second);
}
}
Monday AB
Tuesday AC
Wednesday AD
Thursday AE
Friday AF
Saturday AG
Monday BA
Tuesday BC
Wednesday BD
...
Thursday GD
Friday GE
Saturday GF