Java ASCII表的问题加密练习
我对这个练习有问题 在这个练习中,我输入一个单词和一个数字。我必须使用ASCII表来加密这个单词 如果我输入字母a和数字3,字母变成d。 如果我输入字母z和数字2,字母应该变成b,但会出现一个符号。 另一个问题是如果我使用大写字母。如果我输入大写字母Z,我仍然会得到一个符号Java ASCII表的问题加密练习,java,Java,我对这个练习有问题 在这个练习中,我输入一个单词和一个数字。我必须使用ASCII表来加密这个单词 如果我输入字母a和数字3,字母变成d。 如果我输入字母z和数字2,字母应该变成b,但会出现一个符号。 另一个问题是如果我使用大写字母。如果我输入大写字母Z,我仍然会得到一个符号 另一个问题是,如果我使用字母aB,数字-2应该显示为yZ,但符号会显示出来 以下是练习: public static void main(String[] args) { Scanner in=new Scanner
另一个问题是,如果我使用字母aB,数字-2应该显示为yZ,但符号会显示出来 以下是练习:
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String s, n="";
int N;
System.out.println("Insert a word");
s=in.next();
System.out.println("Insert a number");
N=in.nextInt();
n=uno(s, N);
System.out.println("That's the encrypted word: " + n);
}
public static String uno (String s, int N) {
String f, n="";
int c;
int length = s.length();
for (int i=0; i<length; i++) {
c = s.charAt(i);
c=c+N;
f = Character.toString((char)c);
n=n+f;
}
return n;
}
z的ASCII是122。再加上2。124的ASCII为|符号
您需要检查您的添加是否超出范围,即高于122
注意:如果N大于26,则此操作无效。检查下面的解决方案,它实现了模来处理这个问题
public static String uno (String s, int N) {
String f, n = "";
int c;
int length = s.length();
for (int i = 0; i < length; i++) {
c = s.charAt(i);
c = c + N;
if (c >= 122) {
c -= 26;
}
f = Character.toString((char) c);
n = n + f;
}
return n;
}
处理负数:
public static String uno (String s, int N) {
StringBuilder n = new StringBuilder();
int bound = s.length();
IntStream.range(0, bound).forEach(i -> {
char c = s.charAt(i);
if (N > 0) {
n.append(Character.isUpperCase(c) ?
(char) ((c + N - 'A') % 26 + 'A') :
(char) ((c + N - 'a') % 26 + 'a'));
} else {
n.append((char) (c + N % 26 + 26));
}
});
return n.toString();
}
检查您的命名约定是否正确。z的ASCII为122。再加上2。124的ASCII为|符号
您需要检查您的添加是否超出范围,即高于122
注意:如果N大于26,则此操作无效。检查下面的解决方案,它实现了模来处理这个问题
public static String uno (String s, int N) {
String f, n = "";
int c;
int length = s.length();
for (int i = 0; i < length; i++) {
c = s.charAt(i);
c = c + N;
if (c >= 122) {
c -= 26;
}
f = Character.toString((char) c);
n = n + f;
}
return n;
}
处理负数:
public static String uno (String s, int N) {
StringBuilder n = new StringBuilder();
int bound = s.length();
IntStream.range(0, bound).forEach(i -> {
char c = s.charAt(i);
if (N > 0) {
n.append(Character.isUpperCase(c) ?
(char) ((c + N - 'A') % 26 + 'A') :
(char) ((c + N - 'a') % 26 + 'a'));
} else {
n.append((char) (c + N % 26 + 26));
}
});
return n.toString();
}
检查命名约定是否正确。确保使用模数运算符%将字符限制在a到Z和a到Z之间 按如下方式操作:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s, n = "";
int num;
System.out.print("Insert a word: ");
s = in.nextLine();
System.out.print("Insert a number: ");
num = in.nextInt();
n = uno(s, num);
System.out.println("That's the encrypted word: " + n);
}
public static String uno(String s, int num) {
StringBuilder sb = new StringBuilder();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
if (Character.isUpperCase(ch)) {
sb.append((char) ((s.charAt(i) + num - 'A') % 26 + 'A'));
} else if (Character.isLowerCase(ch)) {
sb.append((char) ((s.charAt(i) + num - 'a') % 26 + 'a'));
}
}
return sb.toString();
}
}
另一个示例运行:
您还应遵循,例如,N应命名为N。确保使用模数运算符%将字符限制在A到Z和A到Z之间 按如下方式操作:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s, n = "";
int num;
System.out.print("Insert a word: ");
s = in.nextLine();
System.out.print("Insert a number: ");
num = in.nextInt();
n = uno(s, num);
System.out.println("That's the encrypted word: " + n);
}
public static String uno(String s, int num) {
StringBuilder sb = new StringBuilder();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
if (Character.isUpperCase(ch)) {
sb.append((char) ((s.charAt(i) + num - 'A') % 26 + 'A'));
} else if (Character.isLowerCase(ch)) {
sb.append((char) ((s.charAt(i) + num - 'a') % 26 + 'a'));
}
}
return sb.toString();
}
}
另一个示例运行:
您还应遵循,例如,N应命名为N。您似乎假设“z”+2位置的ascii符号为“b”。为什么?c=c+N;在这里,您应该检查c是否大于'z',然后对此采取措施。顺便说一句,使用名为N大写的变量是不好的。在同一个作用域中有一个不同的称为n的符号更糟糕。您似乎假设位于“z”+2位置的ascii符号是“b”。为什么?c=c+N;在这里,您应该检查c是否大于'z',然后对此采取措施。顺便说一句,使用名为N大写的变量是不好的。在同一范围内使用另一个称为n的函数更糟糕。谢谢,你说得对。但是如果我输入大写字母Z,我仍然会得到一个符号。我如何解决它?谢谢。另一个问题是如果我使用字母aB,数字-2应该是yZ,但是符号会出来。你可以检查我的编辑。对于更多的新问题,请创建一个新帖子。好的,但是我已经达到了我的问题限制,所以我不能再问更多的问题了,但是我在这个练习中还有其他问题。我可以在这里问你另一个问题吗?谢谢你,你说得对。但是如果我输入大写字母Z,我仍然会得到一个符号。我如何解决它?谢谢。另一个问题是如果我使用字母aB,数字-2应该是yZ,但是符号会出来。你可以检查我的编辑。对于更多的新问题,请创建一个新帖子。好的,但是我已经达到了我的问题限制,所以我不能再问更多的问题了,但是我在这个练习中还有其他问题。我可以在这里问你另一个问题吗?谢谢