Объединить все возможные символы с днями недели

#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