java - 将字符串传递给Java中的方法

标签 java

我正在尝试编写一个脚本,该脚本对纯文本进行加密并到目前为止,它可以工作。我有一个可变的偏移量,它的范围是一个字母递增。方法 encrypt 遍历字符串,只要它是,并且将所有大写字母递增到偏移量所说的那么多。 到目前为止一切都很好。但是我很难将两者的值传递给方法加密。我可以通过创建实例轻松地将 int 传递给构造函数,但这不适用于该方法。

public class Caesar {

    int offset;

    public int kryptograph(int offset){
        return this.offset=offset;
    }

    public String encrypt(String klartext) {
        int wl = klartext.length()-1;
        String text = null;

        for(int i = wl; i >= 0; i++){
            if (Character.isUpperCase(klartext.charAt(i))){
                text += klartext.charAt(i)+kryptograph(offset);
            }
            else {
                text += klartext.charAt(i);
            }
        }
        return text;
    }

    /*public String decrypt(String text2) {
        ;
    }*/

    public static void main(String[] args) {

        Caesar o = new Caesar();
        o.kryptograph(7);
        Caesar k = new Caesar();
        k.encrypt("TEST");

    }

}

我查阅了其他一些教程,但找不到与我的相似的解决方案。所以没有什么可比较的。

编辑:

这是我得到的异常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.lang.String.charAt(String.java:658)
    at javaapplication25.Caesar.encrypt(Caesar.java:16)
    at javaapplication25.Caesar.main(Caesar.java:35)
C:\Users\Kendel\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

最佳答案

您的异常来源 - 您从 n-1 元素开始迭代,但随后您增加了 i 变量,因此您尝试在位置 n 处接收字符,这导致了此异常。

尝试用这个替换你的代码:

public class Caesar {

    private final int offset;

    public Ceasar(int offset){
        this.offset=offset;
    }

    public String encrypt(String klartext) {
     StringBuilder text = new StringBuilder();

     for(int i = klartext.length()-1; i >=0; i--){
        char value = klartext.charAt(i);
        if (Character.isUpperCase(value)){
            text.append(value + kryptograph(offset));
        } else {
            text.append(value);
        }
     }
     return text.toString();
    }

    /*public String decrypt(String text2) {
       // to  be implemented
    }*/

    public static void main(String[] args) {
        Caesar o = new Caesar(7);
        o.encrypt("TEST");
    }

}

偏移量应该是最终的并绑定(bind)到 Ceasar 实例,这样每个 Ceasar 类实例将始终以相同的方式编码和分解。

关于java - 将字符串传递给Java中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090404/

相关文章:

java - 棋子渲染不正确

java - 如何定义具有行时间属性的 apache flink 表

java - 如何将包含对象数组的 JSON 对象发送到 spring Controller ?

java - 没有 web 服务器(tomcat 或 glassfish)的 spring mvc

java - 更新查询并返回单列

java - RMI 注册表问题 : rmiregistry may cause unintended exceptions when binding with codebase using the "file:" URL scheme

java - 从 PSD 文件获取动画信息?

java - Spring Integration动态流线程问题

Java socket IOException - 权限被拒绝

java - 使用 Jackson 反序列化 Guava 的表抛出 "JsonMappingException: No suitable constructor found for type"