凯撒的输出逆转

时间:2016-07-22 01:54:44

标签: java encryption

我尝试使用java实现简单的凯撒转换:

import java.util.Scanner;

public class Caesar_shift {
public static String message;
public static String Shift_msg;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Please type message: ");
    message = scanner.next();
    setShift_msg(message);
    System.out.println(Shift_msg);
}


public static String setShift_msg(String msg) {
    String valueOf;
    for (int i = 0, n = msg.length(); i < n; i++) {
        char c = msg.charAt(i);
        c = (char) (c + 1);
        valueOf = String.valueOf(c);
        Shift_msg = valueOf += Shift_msg;
    }
    return Shift_msg;
}

}

当我运行我的程序时,

String message = "abc"

我应该得到输出bcd。但是,它会返回&#34; dcbnull&#34;。

我怎么能解决它,以及为什么会这样呢?

2 个答案:

答案 0 :(得分:0)

将行apply plugin: 'java' dependencies { compile files('libs/jar-file-1.jar') compile files('libs/jar-file-2.jar') } 更改为Shift_msg = valueOf += Shift_msg; 这就解释了为什么它被逆转了。要在最后删除Shift_msg += valueOf;,请在方法的开头或字符串声明处设置null

答案 1 :(得分:0)

以下是您的代码更正

你对串联的错误顺序犯了错误。

它应该是Shift_msg += valueOf,因为你也会从原始信息开始到结束。

您获得null的原因是因为Shift_msg没有值开头,因此它应该是空的String

public static String message;
public static String Shift_msg = "";

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Please type message: ");
    message = scanner.next();
    setShift_msg(message);
    System.out.println(Shift_msg);
}


public static String setShift_msg(String msg) {
    String valueOf;
    for (int i = 0, n = msg.length(); i < n; i++) {
        char c = msg.charAt(i);
        c = (char) (c + 1);
        valueOf = String.valueOf(c);
        Shift_msg += valueOf;
    }
    return Shift_msg;
}