我无法相信我已经走到了这一步。我的问题是我的输出。该程序假设从用户获取输入并将每个字母递增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
请向我解释为什么会这样。
答案 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);
}
您编写的当前代码是由于播放规则而打印的数字。
答案 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
。
int
,PrintStream
的类型,有System.out
的许多重载;选择的那个取决于论证的类型。
将您的添加内容转回print
,它应该有效:
char