Java 我的程序是打印ascii码而不是实际的字母

Java 我的程序是打印ascii码而不是实际的字母,java,loops,for-loop,printing,Java,Loops,For Loop,Printing,我不敢相信我已经走了这么远。我的问题是我的产出。假设该程序从用户处获取输入,并将每个字母增加2。因此,在从用户处获取字符串后,我将该消息转换为一个字符数组。然后在输出时,我在每个字母上加了2。我的输出是acssii号码。我需要它是真实的信。我该怎么做 import java.util.*; public class Encryption { /** * @param args the command line arguments */ public static

我不敢相信我已经走了这么远。我的问题是我的产出。假设该程序从用户处获取输入,并将每个字母增加2。因此,在从用户处获取字符串后,我将该消息转换为一个字符数组。然后在输出时,我在每个字母上加了2。我的输出是acssii号码。我需要它是真实的信。我该怎么做

import java.util.*;
public class Encryption {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    String userMessage = " ";   
    Scanner input = new Scanner (System.in); 

    System.out.print ("Please enter your Message:");    
    userMessage = input.nextLine().toUpperCase();

    char arr[] = userMessage.toCharArray();
    for (int i=0; i< arr.length;i++){
        System.out.print(arr[i] + 2);
    }

    }


}
import java.util.*;
公共类加密{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
字符串userMessage=“”;
扫描仪输入=新扫描仪(System.in);
System.out.print(“请输入您的消息:”);
userMessage=input.nextLine().toUpperCase();
char arr[]=userMessage.toCharArray();
对于(int i=0;i
示例输入:“谢谢” 输出示例:867467807734918187


请向我解释发生这种情况的原因。

您可以尝试将递增的值强制转换为
char
。此外,我们还可以使用模运算符确保字母适当环绕,例如,
Z
应变为
B

String userMessage = "ALFXYZ";
char arr[] = userMessage.toCharArray();
for (int i=0; i< arr.length;i++) {
    int nextNum = 65 + (arr[i] + 2 - 65) % 26;
    System.out.print((char)nextNum);
}
String userMessage=“ALFXYZ”;
char arr[]=userMessage.toCharArray();
对于(int i=0;i


您编写的当前代码由于强制转换规则正在打印数字。

Java无法提前知道
arr[i]+2
将在char(0-65535)的范围内,因此它会将该表达式视为一个数字

如果您确信arr[i]+2的值永远不会超过此范围,那么您可以安全地将其转换回字符:

System.out.print((char)(arr[i] + 2));

Java自动转换一些基本类型

如果c是一个
char
而i是一个
int
,那么c+i将被视为
int

PrintStream
,类型为
System.out
,具有许多
print
的重载;选择哪一个取决于参数的类型

将您添加的内容转换回
char
,它应该可以工作:

(char)(arr[i] + 2)

如果想要“类似字符串”的消息输出,则需要将字符转换为字符串,请参见()此处不确定要实现的目标。如果你想把“A”映射到“C”、“B”到“D”等等,你可能想把映射存储在一个HASMAP中,然后做一个查找。我想谢谢你变成VJCPPM AQX的注释副本:你需要考虑两种情况:1)如果一个输入字符不是一个字母怎么办?(您已经给出了一个['']]的示例)2)当字母加2的字符代码不是字母的字符代码(例如,“y'+2和“z'+2”)时会发生什么情况?它应该环绕到B@gabi145我更新了我的答案来处理这个边缘问题。你能解释一下最后两行吗?我认为这个字母是65号字符(
A
)加上环绕的2个偏移量。最好是你们自己测试我的代码。