Caesar Cipher单独应用于字符串中的每个字母。每个字母必须向前移动字母表中的n个步骤。如果一个字母从字母表的末尾移开('z'),那么它会一直向后移动到字母表的开头('a')。 `
import java.util.*;
class question7{
public static void main (String[] args ){
String str = "";
//allowing program to take user input using the keyboard
Scanner kb = new Scanner(System.in);
Scanner s = new Scanner(System.in);
int n = 0;
System.out.println("increasing the letters in string by n");
while (true){
System.out.println("Please enter your string");
str = kb.nextLine();
System.out.println("Please enter your n value");
n = s.nextInt();
String incrementedword=new String();
for (int i=0;i<str.length();i++){
incrementedword+=(char)(str.charAt(i)+n);
}
System.out.println ("your word is "+incrementedword);
}
}
}
例如,以下输入(“hello world”,1)应该返回“ifmmp xpsme”
但是当我键入(“hello world”,1)时输出为“ifmmp!xpsme”
我做错了什么?
答案 0 :(得分:4)
这里有两个问题:
我不会在这里提供完整且有效的代码,因为它看起来像是作业。
答案 1 :(得分:0)
如果字母不在范围内,您将需要控制环绕。对于在字母z后面移位的字母,要进行环绕。下面的代码只会移动字符串中的字母。
import java.util.*;
class question7{
public static void main (String[] args ){
String str = "";
//allowing program to take user input using the keyboard
Scanner kb = new Scanner(System.in);
Scanner s = new Scanner(System.in);
int n = 0;
int a = 'a';
int z = 'z';
System.out.println("increasing the letters in string by n");
while (true){
System.out.println("Please enter your string");
str = kb.nextLine().toLowerCase();
System.out.println("Please enter your n value");
n = s.nextInt();
int newCharValue;
int currentChar;
String incrementedword=new String();
for (int i=0;i<str.length();i++){
currentChar = str.charAt(i);
if(!Character.isLetter(currentChar)){
incrementedword+=currentChar;
continue;
}
newCharValue = currentChar + n;
if(newCharValue <= z)
incrementedword+=(char)newCharValue;
else
incrementedword+=(char)(a + (newCharValue - a + 1)%26);
}
System.out.println ("your word is "+incrementedword);
}
}
}
答案 2 :(得分:0)
您可以将字母转换为ascii,然后以这种方式递增它们吗?
我的意思是,你必须设置约束,&#39; a&#39;是97岁,&#39; z&#39;这将确保它保持在小写字符内,你可以告诉它循环回到&#39; a&#39;。
答案 3 :(得分:0)
在循环中放置一个条件,该条件将检查当前字符是否从字母“ a”到“ z”的小写字母:
用于检查当前字符是否为小写字母(a到z)的代码段:
if (currentChar >= 'a' && currentChar <= 'z') {
//Process the shifting of the characters here
}
现在可以将每个字母向前移动n个字母,请尝试以下公式:
if (currentChar >= 'a' && currentChar <= 'z') {
currentChar = (char) ((currentChar - 'a' + k) % 26 + 'a');
//Where n is the number of shifts forward (ex: a + 2 = c)
}