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

时间:2018-04-07 15:32:00

标签: java loops for-loop printing

我无法相信我已经走到了这一步。我的问题是我的输出。该程序假设从用户获取输入并将每个字母递增2.因此,在从用户获取String后,我将消息转换为char数组。然后输出它时我在每个字母上加了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);
    }

    }


}

示例输入:“谢谢” 输出示例:867467807734918187

请向我解释为什么会这样。

3 个答案:

答案 0 :(得分:1)

您可以尝试将递增的值转换为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);
}

Demo

您编写的当前代码是由于播放规则而打印的数字。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

Java会自动转换一些基本类型。

如果 c Private Sub LV_Explore_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles LV_Explore.SelectionChanged If LV_Explore.SelectedItems.Count = 1 Then Dim LVItem As ListViewItem = TryCast(Me.LV_Explore.ItemContainerGenerator.ContainerFromIndex(Me.LV_Explore.SelectedIndex), ListViewItem) If LVItem IsNot Nothing Then Dim BD As Border = TryCast(VisualTreeHelper.GetChild(LVItem, 0), Border) If BD IsNot Nothing Then Dim CP As ContentPresenter = TryCast(BD.Child, ContentPresenter) If CP IsNot Nothing Then Dim SP As StackPanel = TryCast(LVItem.ContentTemplate.FindName("SP_ExploreItem", CP), StackPanel) If SP IsNot Nothing Then Dim TB As TextBlock = TryCast(SP.FindName("TXT_ExploreItem"), TextBlock) TB.TextTrimming = TextTrimming.None TB.Height = Double.NaN End If End If End If End If End If End Sub char,那么 c + i 将被视为int

intPrintStream的类型,有System.out的许多重载;选择的那个取决于论证的类型。

将您的添加内容转回print,它应该有效:

char