Как вывести символы из 2-х функций и произвести вывод? - PullRequest
0 голосов
/ 04 июня 2018

Это всего лишь фрагмент кода, над которым я сейчас работаю.Этот код принимает & and | и 0 and 1 в качестве ввода.Он производит серию строк, т. Е. |||к &&& и серии целых чисел от 000 до 111.

public static void main(String[] args)
    {
        String a;                         //CODE PRODUCING ||| TO &&&
        for(int i=3;i<=3;i++) {
            String p="";

            for(int j=0;j<=i;j++) {
                for(int m=0;m<j;m++) {
                    p=p+"&";    }
            for(int m=0;m<i-j;m++) {
                p=p+"|";    }
            printAllPermutations(p);
            p="";
            }

       int n=3;                          //CODE PRODUCING 000 TO 111
       int rows = (int) Math.pow(2,n);

       for (i=0; i<rows; i++) {
           for (int j=n-1; j>=0; j--) {
               int pp=(i/(int) Math.pow(2, j))%2;
               System.out.print(pp);
               }      
           System.out.println();
           }
        }
    }

Это вывод, который я получаю для кода:

|||
&||
|&|
||&
&&|
&|&
|&&
&&&
000
001
010
011
100
101
110
111

Что мне нужно сейчасдолжен производить выходные данные серий от 0 | 0 | 0 до 0 & 0 & 0,0 | 0 | 1 до 0 & 0 & 1 и, наконец, до 1 | 1 | 1 до 1 & 1 & 1.

Ниже приведен фрагмент кода того, что я пытался сделать.Я создал другую функцию, и я попытался ввести значения из приведенного выше кода, который производит строку p (имеющую ||| to &&&) и pp (от 000 до 111) и берет каждый символ и сохраняет их в a, которыймассив :

for (int i=0; i < pp.length(); i++){
        if (i % 2 != 0){
          a = pp.substring(0,i-1) + p.substring(0,i-1) + pp.substring(i, pp.length())+p.substring(i, pp.length());
        }
      }

Но все же я сталкиваюсь с ошибкой.Я не знаю, где я иду не так и как подходить к решению, чтобы сделать код.

1 Ответ

0 голосов
/ 05 июня 2018

Это довольно сложная проблема, чтобы объединить эти две очень разные перестановки.Поскольку вы программируете на Java, я настоятельно рекомендую вам использовать то, что предлагает Java.

Эта проблема может быть решена с помощью вашего пользовательского Iterable<String>, который Iterator<String> предоставляет вам уникальную перестановку при каждом вызове метода next().Затем используйте эти два итератора (первый для 3x "01" символов и второй для 2x "&|" символов) и объедините их выходные данные.

Вот, пожалуйста,

  1. Пользовательский Iterable<String>, генерирующий перестановку.Обратите внимание, что он расширяет HashSet<String>, что само по себе Iterable, где хранятся перестановки.Метод initialize рекурсивно добавляет все перестановки в Set:

    public class BinaryPermutation extends HashSet<String> {
    
        private final Iterator<String> iterator;
        private final String token;
    
        public BinaryPermutation(String token, int n) {
            this.token = token;
            this.initialize("", n);
            this.iterator = super.iterator();
        }
    
        private void initialize(String string, int iteration) {
            if (iteration == 0) {
               this.add(string);
            } else {
                for (char ch: token.toCharArray()) {
                    initialize(string + Character.toString(ch), iteration - 1);
                }
            }
        }
    }
    
  2. Теперь в главном классе или в любом другом месте создайте статический метод, который объединяет 2 строки вместе (например: 011 + |& = 0|1&1):

    private static String combineString(String s1, String s2) {
        String combined = "";
        for (int i=0; i<Math.max(s1.length(), s2.length()); i++) {
            if (i<s1.length()) { combined += Character.toString(s1.charAt(i)); }
            if (i<s2.length()) { combined += Character.toString(s2.charAt(i)); }
        }
        return combined;
    }  
    
  3. Наконец выполните вызовы через 2 пользовательских итератора и объедините их выходные данные:

    Iterator<String> numbers = new BinaryPermutation("01", 3).iterator();
    Iterator<String> operators = new BinaryPermutation("&|", 2).iterator();
    
    while (numbers.hasNext()) {
        String number = numbers.next();
        while (operators.hasNext()) {
            String operator = operators.next();
            String permutation = combineString(number, operator);
            System.out.println(permutation);
        }
        operators = new BinaryPermutation("&|", 2).iterator();
    }
    

Результатом является бинарная перестановка всех символов, как указано в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...