0

Hey guys I have a crypter/decrypter and wanted to use it over an JavaFX. But my problem is I don´t know, why he doesn´t crypt it how he has to do. I would like to hear some tips or updatet code lines from you guys.

If I run this programm he will make an Exception from the Class "Wuerfel" but my if-statments looks all fine for the cryption of the word. So after 2 hours of trying out I don´t know what the problem can be and would appreciate to hear some advices.


public interface Codec{


    String kodiere(String klartext);
    String dekodiere(String geheimtext);
    String gibLosung();
    void setzeLosung(String schluessel)throws
            IllegalArgumentException; // bei ungeeignetem Schlüssel!

}

//-----------------------------------------------------------------

package pis.hue;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class CodecGui extends Application implements EventHandler<ActionEvent> {

    Button codierer, decodierer;
    TextField losung1, losung2;
    TextArea eingabetext;
    ComboBox auswahl;
    Label eingabelabel, label1, label2;
    Alert info;

    //Codec ceaser = new Ceaser();
    Codec wuerfel1 = new Wuerfel();
    Codec wuerfel2= new Wuerfel();

    @Override
    public void start(Stage primaryStage){
        try{
            //Die GUI über das alles läuft
            AnchorPane root = new AnchorPane();

            //Der Titel der GUI
            primaryStage.setTitle("Hausübung PiS");
            primaryStage.setScene(new Scene(root, 700, 300));
            root.setStyle("-fx-background-color: #363535;");
            primaryStage.show();



            //--------------------------------------------------------
            //Codierer
            codierer = new Button("Codierer");
            codierer.setPrefWidth(120);
            codierer.setMaxHeight(60);
            codierer.setOnAction(this);

            AnchorPane.setRightAnchor(codierer, 10.0);
            AnchorPane.setBottomAnchor(codierer, 10.0);

            //Decodierer
            decodierer = new Button("Decodierer");
            decodierer.setPrefWidth(120);
            decodierer.setMaxHeight(60);
            decodierer.setOnAction(this);

            AnchorPane.setRightAnchor(decodierer, 10.0);
            AnchorPane.setBottomAnchor(decodierer, 60.0);

            //--------------------------------------------------------

            //Eingabefeld
            eingabetext = new TextArea();
            eingabetext.setMaxHeight(300);
            eingabetext.setPrefWidth(700);
            AnchorPane.setTopAnchor(eingabetext, 20.0);
            AnchorPane.setBottomAnchor(eingabetext, 150.0);
            eingabetext.setStyle("-fx-background-color: #BDBDBD;");

            //Losung1
            losung1 = new TextField();
            losung1.setMaxHeight(45);
            losung1.setPrefWidth(250);
            AnchorPane.setBottomAnchor(losung1, 10.0);
            AnchorPane.setLeftAnchor(losung1, 10.0);
            losung1.setStyle("-fx-background-color: #BDBDBD;");

            //Losung2
            losung2 = new TextField();
            losung2.setMaxHeight(45);
            losung2.setPrefWidth(250);
            AnchorPane.setLeftAnchor(losung2, 10.0);
            AnchorPane.setBottomAnchor(losung2, 60.0);
            losung2.setStyle("-fx-background-color: #BDBDBD;");


            //--------------------------------------------------------

            //Labels

            //Eingabelabel
            eingabelabel = new Label("Bitte hier Text eingeben");
            AnchorPane.setTopAnchor(eingabelabel, 1.0);
            eingabelabel.setStyle("-fx-text-fill: #FFFFFF;");

            //Label für Losung 1
            label1 = new Label("Losung 1:");
            AnchorPane.setLeftAnchor(label1, 9.0);
            AnchorPane.setBottomAnchor(label1, 90.0);
            label1.setStyle("-fx-text-fill: #FFFFFF;");

            //Label für Losung 2
            label2 = new Label("Losung 2: (Only Würfel)");
            AnchorPane.setLeftAnchor(label2, 9.0);
            AnchorPane.setBottomAnchor(label2, 40.0);
            label2.setStyle("-fx-text-fill: #FFFFFF;");

            //--------------------------------------------------------

            //ComboBox

            auswahl = new ComboBox<>();
            ObservableList<String> items = FXCollections.observableArrayList("Ceaser", "Würfel");
            auswahl.setItems(items);
            auswahl.setPromptText("Codierungsart: ");

            AnchorPane.setBottomAnchor(auswahl, 60.0);
            AnchorPane.setRightAnchor(auswahl, 200.0);
            auswahl.setMaxHeight(30);
            auswahl.setPrefWidth(200);

            //--------------------------------------------------------

            //Info bezüglich der ComoBox
            info = new Alert(Alert.AlertType.INFORMATION);
            info.setHeaderText("Vorm eintragen, bitte eine Codierung auswählen");
            info.show();


            //--------------------------------------------------------

            root.getChildren().addAll(
                    codierer, decodierer,
                    eingabetext, losung1, losung2
                    ,eingabelabel, label1, label2,
                    auswahl
            );

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void handle(ActionEvent event) {

        String klartext = eingabetext.getText();
        String lwuerfel1 = losung1.getText();
        String lwuerfel2 = losung2.getText();
        wuerfel1.setzeLosung(lwuerfel1);

        if(event.getSource() == codierer && auswahl.getSelectionModel().isSelected(1)){
            if(klartext.matches("[a-zA-Z]")) {
                eingabetext.setText(wuerfel1.kodiere((klartext)));
                klartext = eingabetext.getText();
            }
            if(lwuerfel2.equals("[a-zA-Z]")){
                wuerfel2.setzeLosung(lwuerfel2);
                eingabetext.setText(wuerfel2.kodiere(klartext));
            }
        }
    }


    //Main Methode, die alles startet
    public static void main(String[] args) {

        launch(args);

    }
}


//-----------------------------------------------------------------

package pis.hue;

import java.lang.StringBuilder;

public class Wuerfel implements Codec {

    private String schluessel;
    private int[] verschluessler;
    private StringBuilder sb;

    public Wuerfel(String schluessel) {
        this.schluessel = schluessel;
        sb = new StringBuilder();

        berechnenVers();
    }

    public Wuerfel() {

    }

    private void berechnenVers() {

        int counter = 0;
        verschluessler = new int[this.schluessel.length()];

        for (char c = 'a'; c <= 'z'; c++) {
            for (int i = 0; i < verschluessler.length; i++) {
                if (this.schluessel.charAt(i) == c || this.schluessel.charAt(i) == (c - 32)) {
                    counter++;
                }
            }
        }
    }


    @Override
    public String kodiere(String klartext) {
        int index = 0;
        String newString = "";
        String parts[];

        parts = new String[klartext.length() / this.schluessel.length() + 1];

        for (int i = 0; i < parts.length - 1; i++) {
            parts[i] = klartext.substring(index, index + this.schluessel.length());
            index += this.schluessel.length();
        }

        parts[parts.length - 1] = klartext.substring(index, klartext.toString().length());

        for (int i = 0; i < verschluessler.length; i++) {
            for (int j = 0; j < verschluessler.length; j++) {
                if (verschluessler[j] != i) {
                    continue;
                }

                for (int s = 0; s < parts.length; s++) {
                    if (parts[s].length() - 1 < j) {

                    } else {
                        newString += parts[s].charAt(j);
                    }
                }
            }
        }
        return newString;
    }

    @Override
    public String dekodiere(String geheimtext) {
        int index = 0;
        char[][] zeichen = new char[verschluessler.length][geheimtext.length() / this.schluessel.length()];
        int helper = geheimtext.length() % this.verschluessler.length;

        for (int i = 0; i < helper; i++) {
            zeichen[i] = new char[zeichen[i].length + 1];
        }

        String newString = "";

        for (int i = 0; i < verschluessler.length; i++) {
            for (int j = 0; j < verschluessler.length; j++) {
                if (verschluessler[j] != i)
                    continue;

                    for(int k = 0; k < zeichen[j].length; k++){
                        zeichen[j][k] = geheimtext.charAt(index);
                        index++;
                    }
            }
        }

        for (int i = 0; i < zeichen[zeichen.length - 1].length; i++) {
            for (int j = 0; j < zeichen.length; j++) {
                newString += zeichen[j][i];
            }
        }

        for (int i = 0; i < helper; i++) {
            newString += zeichen[i][zeichen[i].length - 1];
        }
        return newString;
    }

    @Override
    public String gibLosung() {
        return schluessel;
    }

    @Override
    public void setzeLosung(String schluessel) throws IllegalArgumentException {
        try {
            if (!schluessel.matches("[a-zA-Z]+") || schluessel.isBlank())
                throw new IllegalArgumentException("Nur Buchstaben von a-z und A-Z");
            else
                this.schluessel = schluessel;
            berechnenVers();
        } catch (IllegalArgumentException error) {
            System.out.println(error);
        }
    }

}
Alex
  • 11
  • 1

0 Answers0