2016-07-22 33 views
0

我试图用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。但是,它返回“dcbnull”。

我该如何解决这个问题,为什么会发生这种情况?

回答

0

将行Shift_msg = valueOf += Shift_msg;更改为Shift_msg += valueOf; 这解释了为什么它被颠倒过来。并且最后摆脱null,在方法的开头或者在字符串声明时设置Shift_msg = "";

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; 
}