Зашифровать символ 13 раз JavaFX - PullRequest
0 голосов
/ 15 февраля 2019

У меня проблемы с шифрованием кода после 13 символов.Код должен изменить то, что набирается в текстовом поле зашифрованным 13 символами каждый символ.Например, abc шифруется до nop.Здесь вопрос. Первая часть вопроса и вторая часть вопроса Метод, который, я считаю, является проблемой.Теперь, я понимаю, я думаю, что это не получает тринадцать символов.

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

    public class Encrypt13 extends Application {
        @Override
        public void start(Stage primaryStage) {



                // add a gridpane
                GridPane grid = new GridPane();
                grid.setPadding(new Insets(10, 10, 10, 10));



            // add a label for original message top left side
            Label label = new Label("Original Message: ");
            GridPane.setConstraints(label, 0, 0);

            // add label2 for message encrypted
            Label label2 = 

        new Label("Encrpyted Message: ");
        GridPane.setConstraints(label2, 0, 2);

        // add input of text to be encrypted right side of label
        TextField textfield = new TextField();
        GridPane.setConstraints(textfield, 2, 0);

        // add text that will be event handled below textfield
        Label text = new Label();
        GridPane.setConstraints(text, 2, 2);

        // add it to the parent
        grid.getChildren().addAll(label, label2, textfield, text);

        // add an event
        textfield.setOnKeyPressed(e -> {
            // add event with Enter pressed to add arrays compared and added to get 13
            // characters
            char[] newArray = new char[textfield.getLength()];
            if (e.getCode() == KeyCode.ENTER) {
                // this is for the array to get the number checked and added to i char
                for (int p = 0; p < textfield.getLength(); p++) {
                    // this is to get the char i start by the typed from the char until the length
                    // incremented by the method getAllAlpha
                    // which has all alphabets in parameters of the typed with the p number at the
                    // charAt
                    for (char i = textfield.getText().charAt(p); i < textfield.getText().charAt(p) + 1; i += getAllAlpha(textfield.getText(), p)) {
                        newArray[p] += i;
                        text.setText(new String (newArray));
                    }
                }
            }
        });

        // set a scene and place show it
        Scene scene = new Scene(grid, 400, 400);
        primaryStage.setTitle("Encrypt13");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static char getAllAlpha(String q, int x) {
        String alpha = "";
        int i;
        for(i = 0; i <= 255; i++)
        {
            alpha+=(char)i;
        }

        return alpha.charAt(Character.getNumericValue(q.charAt(x)));
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

1 Ответ

0 голосов
/ 15 февраля 2019

Используйте тот факт, что char s поддерживают те же операции, что и другие числовые типы, и тот факт, что az и AZ являются последовательными значениями соответственно.

Вы можете использовать оператор %, чтобы сохранить символыв нужном диапазоне и оберните слишком большие значения.

final int rotationDistance = 13;
final int alphabetCharCount = ('Z' - 'A' + 1);

// add an event
textfield.setOnAction(e -> {
    char[] chars = textfield.getText().toCharArray();

    // rotate chars in [a-zA-Z]
    for (int i = 0; i < chars.length; i++) {
        char c = chars[i];
        if (c >= 'A' && c <= 'Z') {
            chars[i] = (char) ((c - 'A' + rotationDistance) % alphabetCharCount + 'A');
        } else if (c >= 'a' && c <= 'z') {
            chars[i] = (char) ((c - 'a' + rotationDistance) % alphabetCharCount + 'a');
        }
    }
    text.setText(new String(chars));
});

Конечно, вы также можете использовать условие для исправления символов, превышающих алфавитный диапазон.

if (c >= 'A' && c <= 'Z') {
    c += rotationDistance;
    chars[i] = (c > 'Z') ? (char) (c - alphabetCharCount) : c;
} ...
...