我尝试使用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;。
我怎么能解决它,以及为什么会这样呢?
答案 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;
}