Я пишу шифр, но он будет работать, только если я буду игнорировать пробелы. Есть ли способ заставить его игнорировать пробелы? - PullRequest
0 голосов
/ 02 декабря 2019

Я использую шифр della porta, и он работает почти идеально, единственная проблема, с которой я сталкиваюсь, - это наличие пробелов в моем сообщении. Когда в моем сообщении нет пробелов, код просто преобразует его через шифр. Есть ли способ заставить код игнорировать пробелы в сообщении и переходить к следующему символу?

package DellaPorta2;

import java.util.Scanner;

public class DellaPorta {

    public static void main(String[] args) {


        Scanner input = new Scanner(System.in);

        System.out.print("Enter your message: ");
        String message = input.nextLine();
        char[] messageArray = message.trim().toLowerCase().toCharArray(); 
        System.out.print("Enter your keyword: ");
        String key = input.nextLine();
        char[] keyArray = key.toLowerCase().replaceAll(" ", "").toCharArray();
        String convertedMessage = String.valueOf(encryptMessage(messageArray, keyArray));

        System.out.println();
        System.out.println(getKeyString(keyArray).toUpperCase());
        System.out.println(message.toUpperCase());
        System.out.println(convertedMessage.toUpperCase());

    }

    public static char[] encryptMessage(char[] messageArray, char[] keyArray) {

         final char  DellaPortaArray[][] =    { {'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' },
                                                {'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' },
                                                {'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' },
                                                {'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' },
                                                {'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' },
                                                {'s', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' },
                                                {'t', 'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f', 'g' },
                                                {'u', 'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e', 'f' },
                                                {'v', 'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd', 'e' },
                                                {'w', 'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c', 'd' },
                                                {'x', 'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b', 'c' },
                                                {'y', 'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a', 'b' },
                                                {'z', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'a' }};

        char[] convertedMessage = new char[messageArray.length];

        for (int x = 0, y = 0; x < messageArray.length; x++) {
            char characterOfMessage = messageArray[x];
            char characterOfKey = keyArray[(y % keyArray.length)];

            if (characterOfMessage == ' ') {
                convertedMessage[x] = ' ';

            }


            else convertedMessage[x] = DellaPortaArray[(((int)characterOfKey)-97) / 2][((int)characterOfMessage)-97]; y++;


        }   return convertedMessage;
    }



    public static String getKeyString(char[] keyArray){
        String newKeyword = "";
        for (int i = 0; i < keyArray.length; i++) { newKeyword = newKeyword + (keyArray[i]); }
        return newKeyword;
    }

    public static String getMessageString(char[] messageArray){
        String newMessage = "";
        for (int i = 0; i < messageArray.length; i++) { newMessage = newMessage + (messageArray[i]); }
        return newMessage;
    }


}

1 Ответ

2 голосов
/ 02 декабря 2019

Из-за неверного отступа в коде ваш код не выполняет то, что вы думаете.

else без фигурных скобок выполнит только самое следующее утверждение. Вот и все. Итак, это y++, что висит там от конца, совершенно невидимо? Это будет выполнено независимо от того, является ли characterOfMessage пробелом или нет.

Предположительно, вы хотите, чтобы он запускался только тогда, когда там нет пробела, так что пробел ничего не значит буквально. Используйте скобки для остального тоже. (Совет общего руководства по стилю: если вы заключили одну ветвь в if, закрепите их все. На самом деле, многие руководства по стилю предполагают, что если в операторе if используется else, всегда заключайте в скобки.)

...