Désolé pour mon anglais, j'ai fait de mon mieux.
J'ai ce code clé: "M O N C L E T A B D F G H I J K P Q R S U V W X Y Z"
Et ce message: "Les poissons sont des oiseaux sans ailes et les oiseaux sont des poissons sans nageoires"
Globalement mon programme code le message à regrouper par paires de deux et le nouveau message est "FISHXAREXBIRDSXWITHOUTXWINGSXANDXBIRDSXAREXFISHXWITHOUTXFINS"
Donc fondamentalement, chaque deux lettres sont un tableau, comme "FI" est le message [0]; etc...
Les espaces sont remplacés par "X"
Le problème au niveau de mon code est que j'essaie de comprendre l'index de chaque lettre par paire de deux dans le message, puis à partir de là, le deuxième caractère de chaque paire de deux est toujours décalé vers le bon compagnon et le premier caractère est toujours décalé vers le compagnon de gauche
Donc si j'ai FI, je devrais être traduit vers le compagnon droit de celui-ci ("I" dans le keyCode) et F devrait être traduit vers le compagnon gauche de celui-ci ("F" dans le keyCode) "
Dans l'ensemble, je devrais finir de "FI" à "JD" et ainsi de suite pour le reste du message encodé
C'est aussi la partie la plus délicate de celui-ci, Z a également la contrainte droite qui est "M et" M a une gauche faite de "Z"
Edit: si cela n'a pas de sens, tout ce que je veux, c'est déplacer les caractères du message vers la droite ou la gauche en fonction de la règle keyCode.
Edit2: a publié mon code actuel.
import java.util.Scanner;
class pairwiseCipher
{
public static void main(String[] args){
System.out.println("");
char[] keyCode;
keyCode = key();
System.out.println("");
String[] message;
message = message();
System.out.println(message);
String encodedMessage;
encodedMessage = encodedMessage(message,keyCode);
}
public static char[] key(){
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a key in order to perform the opertation.");
char[] key = sc.nextLine().toUpperCase().toCharArray();
System.out.print("Keycode with alphabet: ");
for (int i = 0; i < key.length ; i++){
System.out.printf("%2c",key[i]);
}
char[] alphabet ="ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
for (int i = 0; i<alphabet.length ; i++){
System.out.printf("%2s",alphabet[i]);
}
System.out.println("");
char[] keyTotalLength = new char[key.length + alphabet.length];
int index = 0;
// Add all unique chars from firstString
for (char c : key) {
if (! contains(keyTotalLength, index, c)) {
keyTotalLength[index++] = c;
}
}
// Add all unique chars from secondString
for (char c : alphabet) {
if (! contains(keyTotalLength, index, c)) {
keyTotalLength[index++] = c;
}
}
char[] finalCode = new char[index];
for (int i = 0; i < index; i++) {
finalCode[i] = keyTotalLength[i];
}
System.out.println("");
System.out.print("Scrambled Keycode: ");
System.out.println(finalCode);
return finalCode; //This is the Scrambled keycode
}
public static boolean contains(char[] in, int index, char t) {
for (int i = 0; i < index; i++) {
if (in[i] == t) return true;
}
return false;
}
public static String[] message(){
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a message in order to perform the opertation.");
String message = sc.nextLine().toUpperCase();
message = message.replaceAll("X","ks");
message = message.replaceAll(" ","X");
String[] fixedMessage = message.split("(?<=\\G.{2})");
System.out.print("The encoded Message:");
for (int i = 0 ; i < fixedMessage.length ; i++){
System.out.print(fixedMessage[i]);
System.out.print(" ");
}
System.out.println("------------");
System.out.println(fixedMessage[0]);
System.out.println(fixedMessage[0].charAt(1));
return fixedMessage;
}
// This method encodes the given text string using a Caesar
// cipher, shifting each letter by the rule "M O N C L E T A B D F G H I J K P Q R S U V WX Y Z"
public static void encode(String[] text, char[] shift) {
System.out.print("The encoded message: ");
for (int i = 0; i < text.length; i++) {
char letter = text.charAt(i);
// shift only letters (leave other characters alone)
if (letter >= 'a' && letter <= 'z') {
letter = (char) (letter + shift);
// may need to wrap around
if (letter > 'z') {
letter = (char) (letter - 26);
} else if (letter < 'a') {
letter = (char) (letter + 26);
}
}
System.out.print(letter);
}
System.out.println();
}
}
3 réponses
C'est ce que vous essayez probablement de faire !!
import java.util.ArrayList;
import java.util.List;
class pairwiseCipher{
public static void main(String[] args){
char[] key= {'M', 'O', 'N', 'C', 'L', 'E', 'T', 'A', 'B', 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'P', 'Q', 'R', 'S', 'U','V', 'W','X','Y','Z'};
char[] old = null;
char[][] neww = null;
char[][] ans = null;
String msg= "Fish are birds without wings and birds are fish without fins";
msg = msg.toUpperCase();
msg = msg.replace(' ', 'X');
System.out.println(msg);
old = msg.toCharArray();
neww = new char[msg.length()/2][2];
ans = new char[msg.length()/2][2];
for(int i=0,j=0; i<msg.length() ; i=i+2,j+=1){
neww [j][0] = old[i];
neww [j][1] = old[i+1];
}
//this is just to display characters in pairs
for(int j=0; j<neww.length; j++){
System.out.print(neww[j][0]+""+neww[j][1] + " ");
}
System.out.println();
List<Character> cList = new ArrayList<Character>();
for(char c : key) {
cList.add(c);
}
for(int j=0; j<neww.length; j++){
int x = (cList.indexOf(neww[j][1]) + 1 ) == 26 ? 0 : (cList.indexOf(neww[j][1]) + 1 );
int y = (cList.indexOf(neww[j][0]) - 1 ) == -1 ? 25 : (cList.indexOf(neww[j][0]) - 1 );
ans[j][0] = cList.get(x);
ans[j][1] = cList.get(y);
}
for(int j=0; j<ans.length; j++){
System.out.print(ans[j][0]+""+ans[j][1] + " ");
}
//System.out.println(cList.get(0));
}
}
Vous pouvez créer une carte de gauche et une carte de droite en utilisant java.util.HashMap. Ensuite, pour chaque paire de caractères, vous pouvez simplement afficher rightMap.get (char2) + leftMap.get (char1).
Essayez le code ci-dessous pour commencer ... !!
public class Encrypter {
public static void main(String[] args) {
//you can take key as a space separaed string and split it into array of chars
char[] key= {'M', 'O', 'N', 'C', 'L', 'E', 'T', 'A', 'B', 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'P', 'Q', 'R', 'S', 'U','V', 'W','X','Y','Z'};
char[] old = null;
char[][] neww = null;
String msg= "Fish are birds without wings and birds are fish without fins";
msg = msg.replace(' ', 'X');
System.out.println(msg);
old = msg.toCharArray();
neww = new char[msg.length()/2][2];
for(int i=0; i<msg.length()/2 ; i=i+2){
{
neww [i][0] = old[i];
neww [i][1] = old[i+1];
}
}
//this is just to display characters in pairs
for(int j=0; j<neww.length; j++){
for(int k=0; k<2; k++){
System.out.print(neww[j][k]+" ");
}
}
//Now you can write the code that replaces proper character in the message from key
//....
//....
}
}
Questions connexes
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].