For my assignment, I have to write a code to encode/decode a message. I am near the end when I began to discover that whenever I type the message, the program only replaces certain characters. The translation is fairly simple, to encode, you change a to the opposite letter of the alphabet, so z. b to y, c to x, d to w, etc. The Assignment is as follows:
This project involves writing a program that encodes and decodes messages. The program should prompt the user to select whether a message is to be encoded or decoded and then prompts the user to enter the message. A blank space is used to separate each word in the message, and a period (.) is used to denote the end of a sentence. Separate methods must be used to encode and decode the input message. The coding scheme is very simple: the code equivalent for the letter A is Z, for B is Y, … , and for Z is A, as indicated in the following table. As an example, if the user chooses to encode a sentence like hello world, the encoded sentence would be svool dliow.
Here is my code:
import java.util.Scanner ;
public class Project1
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in) ;
//prompt user to decide to encode or decode
System.out.print("Please enter 1 to encode, or 2 to decode the message: ") ;
int promptNumber = input.nextInt() ;
if (promptNumber == 1) {
System.out.println("You have choosen to encode the message.") ;
System.out.print("Please enter the message you wish to be encoded: ") ;
String encode = input.next();
encode += input.nextLine();
encode = encodeMessage(encode) ;
System.out.println("Your encoded message is now: " + encode) ;
}
else if (promptNumber == 2) {
System.out.println("You have choosen to decode the message.") ;
System.out.print("Please enter the message you wish to decode: ") ;
String decode = input.next();
decode += input.nextLine();
decode = decodeMessage(decode) ;
System.out.println("Your encoded message is now: " + decode) ;
}
else
System.out.println("Please enter a value of 1 or 2.") ;
}
//method for encoded calculation
public static String encodeMessage(String message)
{
String str = message ;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case 'a': str = str.replace('a', 'z') ; break ;
case 'b': str = str.replace('b', 'y') ; break ;
case 'c': str = str.replace('c', 'x') ; break ;
case 'd': str = str.replace('d', 'w') ; break ;
case 'e': str = str.replace('e', 'v') ; break ;
case 'f': str = str.replace('f', 'u') ; break ;
case 'g': str = str.replace('g', 't') ; break ;
case 'h': str = str.replace('h', 's') ; break ;
case 'i': str = str.replace('i', 'r') ; break ;
case 'j': str = str.replace('j', 'q') ; break ;
case 'k': str = str.replace('k', 'p') ; break ;
case 'l': str = str.replace('l', 'o') ; break ;
case 'm': str = str.replace('m', 'n') ; break ;
case 'n': str = str.replace('n', 'm') ; break ;
case 'o': str = str.replace('o', 'l') ; break ;
case 'p': str = str.replace('p', 'k') ; break ;
case 'q': str = str.replace('q', 'j') ; break ;
case 'r': str = str.replace('r', 'i') ; break ;
case 's': str = str.replace('s', 'h') ; break ;
case 't': str = str.replace('t', 'g') ; break ;
case 'u': str = str.replace('u', 'f') ; break ;
case 'v': str = str.replace('v', 'e') ; break ;
case 'w': str = str.replace('w', 'd') ; break ;
case 'x': str = str.replace('x', 'c') ; break ;
case 'y': str = str.replace('y', 'b') ; break ;
case 'z': str = str.replace('z', 'a') ; break ;
case ' ': continue ;
case '.': break ;
}
}
return str ;
}
//method for decoded calculation
public static String decodeMessage(String message)
{
String str = message ;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case 'a': str = str.replace('a', 'z') ; break ;
case 'b': str = str.replace('b', 'y') ; break ; //Error
case 'c': str = str.replace('c', 'x') ; break ;
case 'd': str = str.replace('d', 'w') ; break ; //Error
case 'e': str = str.replace('e', 'v') ; break ;
case 'f': str = str.replace('f', 'u') ; break ;
case 'g': str = str.replace('g', 't') ; break ;
case 'h': str = str.replace('h', 's') ; break ;
case 'i': str = str.replace('i', 'r') ; break ;
case 'j': str = str.replace('j', 'q') ; break ;
case 'k': str = str.replace('k', 'p') ; break ;
case 'l': str = str.replace('l', 'o') ; break ; //Error
case 'm': str = str.replace('m', 'n') ; break ;
case 'n': str = str.replace('n', 'm') ; break ;
case 'o': str = str.replace('o', 'l') ; break ;
case 'p': str = str.replace('p', 'k') ; break ;
case 'q': str = str.replace('q', 'j') ; break ;
case 'r': str = str.replace('r', 'i') ; break ;
case 's': str = str.replace('s', 'h') ; break ;
case 't': str = str.replace('t', 'g') ; break ;
case 'u': str = str.replace('u', 'f') ; break ;
case 'v': str = str.replace('v', 'e') ; break ;
case 'w': str = str.replace('w', 'd') ; break ;
case 'x': str = str.replace('x', 'c') ; break ;
case 'y': str = str.replace('y', 'b') ; break ; //Error
case 'z': str = str.replace('z', 'a') ; break ;
case ' ': continue ;
case '.': break ;
}
}
return str ;
}
}
It seems that you're iterating over your string by index, and instead of changing the current index, you're changing all occurrences of that particular value in that string, regardless if you have changed it, or still need to change it.
Let's clarify this with an example: "aba" with the following cypher: a => b, b => a
index 0: a => change all occurrences of a => result: bbb
index 1: b => change all occurrences of b => result: aaa
index 2: a => change all occurrences of a => result: bbb
while you clearly expected to shift every index only once. If we change this in your current code, using lets say an char[] to change the value in the current index, we get something like this:
public static String encodeMessage(String message) {
char[] str = message.toCharArray();
for (int i = 0; i < str.length; i++) {
switch (str[i]) {
case 'a':
str[i] = 'z';
break;
case 'b':
str[i] = 'y';
break;
case 'c':
str[i] ='x';
break;
case 'd':
str[i] ='w';
break;
case 'e':
str[i] = 'v';
break;
case 'f':
str[i] = 'u';
break;
case 'g':
str[i] = 't';
break;
case 'h':
str[i] = 's';
break;
case 'i':
str[i] = 'r';
break;
case 'j':
str[i] = 'q';
break;
case 'k':
str[i] = 'p';
break;
case 'l':
str[i] = 'o';
break;
case 'm':
str[i] = 'n';
break;
case 'n':
str[i] = 'm';
break;
case 'o':
str[i] = 'l';
break;
case 'p':
str[i] = 'k';
break;
case 'q':
str[i] = 'g';
break;
case 'r':
str[i] = 'i';
break;
case 's':
str[i] = 'h';
break;
case 't':
str[i] = 'g';
break;
case 'u':
str[i] = 'f';
break;
case 'v':
str[i] = 'e';
break;
case 'w':
str[i] = 'd';
break;
case 'x':
str[i] = 'c';
break;
case 'y':
str[i] = 'b';
break;
case 'z':
str[i] = 'a';
break;
case ' ':
continue;
case '.':
break;
}
}
return new String(str);
}
et voila:
Your encoded message is now: svool dliow
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With