Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ASCII表的问题加密练习_Java - Fatal编程技术网

Java ASCII表的问题加密练习

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

我对这个练习有问题

在这个练习中,我输入一个单词和一个数字。我必须使用ASCII表来加密这个单词

如果我输入字母a和数字3,字母变成d。 如果我输入字母z和数字2,字母应该变成b,但会出现一个符号。 另一个问题是如果我使用大写字母。如果我输入大写字母Z,我仍然会得到一个符号


另一个问题是,如果我使用字母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,但是符号会出来。你可以检查我的编辑。对于更多的新问题,请创建一个新帖子。好的,但是我已经达到了我的问题限制,所以我不能再问更多的问题了,但是我在这个练习中还有其他问题。我可以在这里问你另一个问题吗?谢谢