我试图对用户输入进行编码,方法是将其转换为字符数组,然后对其进行编码,然后再次将其转换为字符串以将其打印出来,但是出现了问题(假设将 A 转换为 Z , B 转换为 Y 等...)和( a 转换为 z , b 转换为 y) ,帮助我被困了几个小时。
import java.util.*;
public class PartA {
public static void main(String args[]) {
PartA one = new PartA();
String i = one.encode();
System.out.println(i);
}
public String encode() {
Scanner input = new Scanner(System.in);
String word = input.nextLine();
char ch[] = word.toCharArray();
for (int x = 0; x <= ch.length; x++) {
if (ch[x] >= 'A' || ch[x] >= 'z') {
ch[x] = (char)(ch[x] + 25);
}
}
String enc = ch.toString();
return enc;
}
}
最佳答案
您需要考虑进行此转换的逻辑。
第一步是研究 ASCII table并找到您所需要的背后的逻辑。
例如,如果您需要转换 Z
中的 A
、Y
中的 B
等,请查找相关性:
A - Z
65 - 90
B - Y
66 - 89
C - X
67 - 88
...
对于a
到z
、b
到y
也是如此...
此代码可以解决您的问题:
import java.util.*;
public class PartA {
private final static int A_UPPER_ASCII_NUMBER = 65;
private final static int A_LOWER_ASCII_NUMBER = 97;
public static void main(String args[]) {
PartA one = new PartA();
String i = one.encode();
System.out.println(i);
}
public String encode() {
Scanner input = new Scanner(System.in);
String word = input.nextLine();
char ch[] = word.toCharArray();
for (int x = 0; x < ch.length; x++) {
if (ch[x] >= 'A' && ch[x] <= 'Z') {
int res = (25 + (A_UPPER_ASCII_NUMBER - ch[x]) * 2);
ch[x] = (char) (ch[x] + res);
}
if (ch[x] >= 'a' && ch[x] <= 'z') {
int res = (25 + (A_LOWER_ASCII_NUMBER - ch[x]) * 2);
ch[x] = (char) (ch[x] + res);
}
}
String enc = ch[0] + "";
return enc;
}
}
当然,同一件事有更好的逻辑。
关于java - 尝试编码但有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929491/