Как мне поместить все эти индексы в массив символов? - PullRequest
0 голосов
/ 28 октября 2018

Я не могу найти способ, чтобы иметь возможность поместить encryptedChar в массив символов, чтобы я мог поместить сообщение в одну строку.Если бы кто-нибудь мог дать мне простое решение проблемы или помочь мне в любом случае, это было бы здорово!

import java.util.*;

public class MyClass {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);

        // can get the index without key. DONE
        // encrypt message. finish equation. 

        int encryptKey, encryptedIndex; 
        int plainLetterIndex = 0; 
        int loadingBar = 3; 
        char encryptedChar; 
        char[] alphaArray = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        String redo, message;

        System.out.println("Welcome to the encrypter and decrypter program. The program will take the message");
        System.out.println("and either encrypt it or decrypt it. Depending on what you choose to do.");

        System.out.println("");

        do {
            System.out.println("Please enter your message!");
            message = sc.nextLine();
            message = message.toUpperCase();

            System.out.print("Would you like to re-enter your message? (Y/N)");
            redo = sc.nextLine();

        } while (redo.equals("Y") || redo.equals("y"));

        // declaring arrays
        char[] messageArray = message.toCharArray();
        char[] encryptedMessageArray = new char[messageArray.length];

        // asking for key
        System.out.println("Please input the 'key' you would like to use to encrypt your message.");

        while(true){
            try{
                encryptKey = Integer.parseInt(sc.nextLine());
                break;
            } catch (NumberFormatException ignore){
                System.out.println("You have entered an incorrect number, please try again!");
            }
        }


        System.out.println(" ");

        for (int i = 0; i < messageArray.length; i++) {

            //System.out.println(messageArray[i]);

            for (int k = 0; k < alphaArray.length; k++) {

                if (messageArray[i] == alphaArray[k]) {
                    plainLetterIndex = k;

                    encryptedIndex = (char)(plainLetterIndex + encryptKey) % 26;
                    encryptedChar = alphaArray[encryptedIndex];

                    //encryptedMessageArray = encryptedChar; 

                    System.out.print(encryptedChar);
                }
            }
        }
        sc.close();
    }
}

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Добавьте зашифрованный символ или исходный символ к вашему encryptedMessageArray, чтобы вы могли расшифровать конец массива и получить исходное сообщение

for (int i = 0; i < messageArray.length; i++) {
    boolean isCharEncrypted = false;
    for (int k = 0; k < alphaArray.length; k++) {
        if (messageArray[i] == alphaArray[k]) {
            plainLetterIndex = k;

            encryptedIndex = (char)(plainLetterIndex + encryptKey) % 26;
            encryptedChar = alphaArray[encryptedIndex];

            encryptedMessageArray[i] = encryptedChar; 
            isCharEncrypted = true;
        }
    }
    if (!isCharEncrypted) {
        encryptedMessageArray[i] = messageArray[i];
    }
}

Вот альтернативное решение, позволяющее избежать внутреннего цикла for

for (int i = 0; i < messageArray.length; i++) {
    char c = messageArray[i];
    if (c >= 'A' && c <= 'Z') {
       plainLetterIndex = c - 65; //A is ASCII 65

       encryptedIndex = (char) (plainLetterIndex + encryptKey) % 26;
       encryptedChar = alphaArray[encryptedIndex];

       encryptedMessageArray[i] = encryptedChar;
   } else {
       encryptedMessageArray[i] = messageArray[i];
   }
}
0 голосов
/ 28 октября 2018

Используйте индексную переменную для encryptedMessageArray, увеличивайте ее каждый раз, когда вы помещаете символ в encryptedMessageArray

int index = 0;
for (int i = 0; i < messageArray.length; i++) {

        //System.out.println(messageArray[i]);

        for (int k = 0; k < alphaArray.length; k++) {

            if (messageArray[i] == alphaArray[k]) {
                plainLetterIndex = k;

                encryptedIndex = (char)(plainLetterIndex + encryptKey) % 26;
                encryptedChar = alphaArray[encryptedIndex];

                encryptedMessageArray[index] = encryptedChar; 
                index++;

            }
        }

    }

 System.out.println();
 System.out.println(encryptedMessageArray);
...