Шифрование текста с помощью матрицы

[![скрин][1]][1][Шифрование текста с помощью матрицыМне нужно придать ему вид, как на экране, но я уверен, что сделал это неправильно. Дело в том, что есть строка str, в данном случае это (я люблю маму очень большую и люблю машину) и после ввода этой строки в матрицу нужно разбить ее на группы по 5 букв. Результат должен быть следующим (irlyo bvieg maynm dolto hveer cvaer).

public static void main(String[] args) {


        String[][] matrixA;
        matrixA = new String[2][15];

        matrixA[0][0] = "i";
        matrixA[0][1] = "l";
        matrixA[0][2] = "o";
        matrixA[0][3] = "v";
        matrixA[0][4] = "e";
        matrixA[0][5] = "m";
        matrixA[0][6] = "y";
        matrixA[0][7] = "m";
        matrixA[0][8] = "o";
        matrixA[0][9] = "t";
        matrixA[0][10] = "h";
        matrixA[0][11] = "e";
        matrixA[0][12] = "r";
        matrixA[0][13] = "v";
        matrixA[0][14] = "e";
        matrixA[1][0] = "r";
        matrixA[1][1] = "y";
        matrixA[1][2] = "b";
        matrixA[1][3] = "i";
        matrixA[1][4] = "g";
        matrixA[1][5] = "a";
        matrixA[1][6] = "n";
        matrixA[1][7] = "d";
        matrixA[1][8] = "l";
        matrixA[1][9] = "o";
        matrixA[1][10] = "v";
        matrixA[1][11] = "e";
        matrixA[1][12] = "c";
        matrixA[1][13] = "a";
        matrixA[1][14] = "r";


        for (int i = 0; i < matrixA.length; i++) {
            for (int j = 0; j < matrixA[i].length; j++) {
                System.out.print(matrixA[i][j] + "\t");
            }
            System.out.println();
        }
    }

Ввод String всегда 30 символов? Какова цель вашей программы? Вы должны создать диаграмму или только окончательный результат?

Gilbert Le Blanc 18.03.2022 07:25

@GilbertLeBlanc Почему бы просто не предположить, что строка не всегда состоит из 30 символов? Почему важно, какова цель программы? Иван не просил делать диаграмму, я полагаю, что это было просто в помощь читателю.

MorganS42 18.03.2022 08:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я вижу внизу у вас есть два цикла for, которые зацикливаются на матрице. Все, что нам нужно сделать, чтобы достичь алгоритма, о котором вы просите, - это перебрать матрицу, но с перевернутыми размерами. Затем проверьте, не пора ли добавить пробел, используя модуль. Попробуйте эту функцию, дайте мне знать, если у вас есть какие-либо вопросы.

public static String getGroups(String[][] matrix, int groupSize) {
    String output = "";
    int matrixWidth = matrix.length;
    int matrixHeight = matrix[0].length;
    
    int k = 0;
    for (int i = 0; i < matrixHeight; i++) {
        for (int j = 0; j < matrixWidth; j++) {
            k++;
            output += matrix[j][i];
            if (k % groupSize == 0) output += " ";
        }
    }
    
    return output;
}

Все, что вам нужно сделать, это вызвать getGroups, передать matrixA и передать groupSize 5. Вот как это будет выглядеть: System.out.println(getGroups(matrixA, 5));

Также предупреждаю, что в этой строке не хватает двойной кавычки ("") matrixA[0][10] = h";

Это означает, что полный код должен выглядеть так:

public static void main(String[] args) {
    String[][] matrixA;
    matrixA = new String[2][15];

    matrixA[0][0] = "i";
    matrixA[0][1] = "l";
    matrixA[0][2] = "o";
    matrixA[0][3] = "v";
    matrixA[0][4] = "e";
    matrixA[0][5] = "m";
    matrixA[0][6] = "y";
    matrixA[0][7] = "m";
    matrixA[0][8] = "o";
    matrixA[0][9] = "t";
    matrixA[0][10] = "h";
    matrixA[0][11] = "e";
    matrixA[0][12] = "r";
    matrixA[0][13] = "v";
    matrixA[0][14] = "e";
    matrixA[1][0] = "r";
    matrixA[1][1] = "y";
    matrixA[1][2] = "b";
    matrixA[1][3] = "i";
    matrixA[1][4] = "g";
    matrixA[1][5] = "a";
    matrixA[1][6] = "n";
    matrixA[1][7] = "d";
    matrixA[1][8] = "l";
    matrixA[1][9] = "o";
    matrixA[1][10] = "v";
    matrixA[1][11] = "e";
    matrixA[1][12] = "c";
    matrixA[1][13] = "a";
    matrixA[1][14] = "r";

    for (int i = 0; i < matrixA.length; i++) {
        for (int j = 0; j < matrixA[i].length; j++) {
            System.out.print(matrixA[i][j] + "\t");
        }
        System.out.println();
    }
    
    System.out.println(getGroups(matrixA, 5));
}

public static String getGroups(String[][] matrix, int groupSize) {
    String output = "";
    int matrixWidth = matrix.length;
    int matrixHeight = matrix[0].length;
    
    int k = 0;
    for (int i = 0; i < matrixHeight; i++) {
        for (int j = 0; j < matrixWidth; j++) {
            k++;
            output += matrix[j][i];
            if (k % groupSize == 0) output += " ";
        }
    }
    
    return output;
}

Как можно показать результат только один раз?

Ivan Kolisnik 18.03.2022 09:28

Что ты имеешь в виду? Он возвращает результат только один раз?

MorganS42 18.03.2022 10:39

не 5 раз, а хочу 1 раз теленок

Ivan Kolisnik 18.03.2022 10:50

Вы пробовали запустить функцию? 5 в моем примере — это просто размер группы, это означает, что вы можете изменить его на размер группы 6, 2, 10 и т. д.

MorganS42 18.03.2022 10:56

@Ivan Kolisnik, судя по твоему сообщению своя: The result should be as follows (irlyo bvieg maynm dolto hveer cvaer). Это точно, который выдает приведенный выше код. А что такое calf?

DevilsHnd 18.03.2022 10:57

Я хочу отображать закодированный текст только один раз

Ivan Kolisnik 18.03.2022 11:03

Эта линия (irlyo bvieg maynm dolto hveer cvaer)

Ivan Kolisnik 18.03.2022 11:03

Когда вы запускаете функцию, сколько раз она «отображает» ее для вас?

MorganS42 18.03.2022 11:05

Я добавил результат компиляции ниже

Ivan Kolisnik 18.03.2022 11:08

Убедитесь, что вы не вызвали функцию внутри цикла for внизу. Убедитесь, что он находится вне цикла for, так он будет вызываться только один раз.

MorganS42 18.03.2022 11:17

Тогда моя матрица меняет вид. Посмотрите на экран выше. Вывод больше не в столбцах

Ivan Kolisnik 18.03.2022 11:25

как исправить? Знаете ли вы?

Ivan Kolisnik 18.03.2022 11:42

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

MorganS42 18.03.2022 13:11

@IvanKolisnik, чтобы обработать указанную вами строку: i love my mother very big and love car и использовать метод getGroups(), предоставленный @MorganS42, вам нужно сделать что-то вроде этого:

Создайте матрицу (например, образец, который вы показали)

String strg = "i love my mother very big and love car";
strg = strg.replaceAll("\\s+", ""); // Remove all whitespaces!
int columns = strg.length() / 2;
String[][] matrix = new String[2][columns];

int indexer = 0;
for (int row = 0; row < matrix.length; row++) {
    for (int column = 0; column < matrix[row].length; column++) {
        matrix[row][column] = Character.toString(strg.charAt(indexer));
        indexer++;
    }
}

// Display Current Generated Matrix...
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j].isEmpty()) {
            break;
        }
        System.out.print(matrix[i][j]);
    }
    System.out.println();
}

System.out.println();

Отобразите зашифрованную строку (согласно вашим спецификациям):

/* Get the desired grouping from the generated 
   matrix and displsy it to console...     */
String encryptedString = getGroups(matrix, 5);
System.out.println(encryptedString);
 

Вывод на консоль должен быть:

ilovemymotherve
rybigandlovecar

irlyo bvieg maynm dolto hveer cvaer

Следовательно... если строка для шифрования была:

I love my mother very big but I love my car bigger!

Вывод консоли будет:

Ilovemymotherverybig
butIlovemycarbigger!

Ibluo tvIel moyvm eomty hcear rvbei rgygb eirg! 

Дайте мне знать, если это сработает для вас, я удалю этот пост.

DevilsHnd 18.03.2022 11:31

Напишите, пожалуйста, как это будет выглядеть. полный код

Ivan Kolisnik 18.03.2022 11:35

Другие вопросы по теме