Java 从当前字母查找字母表中的第n个字母

Java 从当前字母查找字母表中的第n个字母,java,char,ascii,alphabet,Java,Char,Ascii,Alphabet,因此,我试图从字母表中提取一个字母,由用户输入,然后找到10个字母以外的字母,如果字母是“z”或“y”或任何小于字母16的字母,我希望它环绕字母表 我正在努力与循环部分。我知道字母表被扔进了ASCII表中,数字不是1-26,所以我不知道如何处理它。这就是我目前所拥有的 public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("Please

因此,我试图从字母表中提取一个字母,由用户输入,然后找到10个字母以外的字母,如果字母是“z”或“y”或任何小于字母16的字母,我希望它环绕字母表

我正在努力与循环部分。我知道字母表被扔进了ASCII表中,数字不是1-26,所以我不知道如何处理它。这就是我目前所拥有的

public static void main(String[] args){

    Scanner input = new Scanner(System.in);
    System.out.println("Please input your favorite letter");
    char userLetter = input.next().charAt(0);
    char newLetter = (char) ((userLetter + 10) % 26);

    System.out.println("10 letters beyond your letter is " + newChar);

}

有人能帮忙吗?

我们可以尝试将小写和大写字母字符映射到1-26的比例,然后使用模数进行移位和可能的换行。最后,我们跟踪移位量,以便将其添加回生成移位字符

Scanner input = new Scanner(System.in);
System.out.println("Please input your favorite letter");
char userLetter = input.next().charAt(0);

// get the ASCII value of the input character
int ascii = (int) userLetter;
// compute the shift (97 for lowercase, 65 for uppercase)
int shift = ascii > 90 ? 97 : 65;

int newPosition = (ascii - shift + 10) % 26;
newPosition += shift;

char newChar = (char) newPosition;
System.out.println("10 letters beyond your letter is " + newChar);

相反,您可以使用组合的值

String userLetter = ...;
int charValue = userLetter.charAt(0);
String next = String.valueOf((char)(charValue + 10));
然后,只需一个if语句来检测它何时到达A或Z并相应地更改它

希望这有帮助。

它被称为凯撒密码 你的班次是多少

//A Java Program to illustrate Caesar Cipher Technique 
public class CaesarCipher 
{ 
    // Encrypts text using a shift od s 
    public static StringBuffer encrypt(String text, int s) 
    { 
        StringBuffer result= new StringBuffer(); 

        for (int i=0; i<text.length(); i++) 
        { 
            if (Character.isUpperCase(text.charAt(i))) 
            { 
                char ch = (char)(((int)text.charAt(i) + 
                                s - 65) % 26 + 65); 
                result.append(ch); 
            } 
            else
            { 
                char ch = (char)(((int)text.charAt(i) + 
                                s - 97) % 26 + 97); 
                result.append(ch); 
            } 
        } 
        return result; 
    } 

    // Driver code 
    public static void main(String[] args) 
    { 
        String text = "ATTACKATONCE"; 
        int s = 10; 
        System.out.println("Text : " + text); 
        System.out.println("Shift : " + s); 
        System.out.println("Cipher: " + encrypt(text, s)); 
    } 
} 
//一个演示Caesar密码技术的Java程序
公共类密码
{ 
//使用移位键加密文本
公共静态StringBuffer加密(字符串文本,int s)
{ 
StringBuffer结果=新的StringBuffer();
对于(int i=0;i请尝试以下方法:

public static void main(String[] args) {

    public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("Please input your favorite letter");
    char userLetter = input.next().charAt(0);
    int unumber = (int) userLetter;

    int newNum=unumber+10;


    if(newNum>122 || newNum>90){

        newNum=(unumber)-(26-10);
    }

    char newLetter = (char) (newNum);


    System.out.println("10 letters beyond your letter is " + newLetter);
}

@约翰·弗伯斯你好,约翰。如果你看我的代码,你会发现我使用了模来包装。问题是在
ASCII表中,
字母表没有编号1-26。但我现在确实有了一个想法,这是一种非常优雅的方法。谢谢,它工作得非常完美!