Помещение всех 8-битных двоичных последовательностей в строковый массив Java - PullRequest
4 голосов
/ 01 октября 2019

что я пытаюсь поместить все возможные 256 двоичных битовых последовательностей в строковый массив. Чтобы сделать это, я создал 8 циклов для всех возможных случаев. Вот что я пробовал до сих пор.

static String[] BitSequences() {    
    int[] result = new int[256];
    for (int a = 0; a < 256; a++) {
        for (int i = 0; i < 2; i++){
            for (int j = 0; j < 2; j++){
                for (int k = 0; k < 2; k++){
                    for (int l = 0; l < 2; l++){
                        for (int m = 0; m < 2; m++){
                            for (int n = 0; n < 2; n++){
                                for (int o = 0; o < 2; o++){
                                    for (int p = 0; p < 2; p++){
                                        result[a] = ; //this part is a problem
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
    String str = Arrays.toString(result);
    System.out.println(str);
    return str;
}

Этот метод должен возвращать строковый массив, который содержит все возможные случаи. Однако я не знаю, как вставить эти значения, создавая циклы for, используя значения int. Его легко распечатать: «System.out.println (i + j + k + ..... + p)», любая помощь будет признательна!

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

8-разрядное целое число с двумя дополнительными числами находится в диапазоне от -128 до 127. Чтобы представить этот диапазон, мы можем использовать IntStream#rangeClosed.

С этот ответ , мы можем использовать BigInteger для левой панели. двоичный файл String (генерируется Integer#toBinaryString) с нулями, если его длина меньше 8 (что означает, что значение положительное).

В противном случае значение представляет собойотрицательное число, и соответствующая ему двоичная строка будет иметь длину, превышающую 8, которая должна быть усечена до 8 символов с использованием String#substring.

Наконец, Stream<String>можно собрать в String[], используя Stream#toArray.

public static String[] generateBitSequences() { 
    return IntStream.rangeClosed(-128, 127)
        .mapToObj(Integer::toBinaryString)
        .map(BigInteger::new)
        .map(b -> String.format("%08d", b))    // Left pad positive values with 0s.
        .map(s -> s.substring(s.length() - 8)) // Remove leading 1s from negative values.
        .toArray(String[]::new);
}

Выход:

[10000000, 10000001, ..., 01111110, 01111111]
2 голосов
/ 01 октября 2019

Рассмотрите возможность использования встроенного метода преобразования для двоичных строк:

static String[] BitSequences() {    
    String[] result = new String[256];
    for (int a = 0; a < 256; a++) {
        result[a] = Integer.toBinaryString(a);
    }
    String str = Arrays.toString(result);
    System.out.println(str);
    return str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...