1
votes

Recherche de la nième lettre de l'alphabet à partir de la lettre actuelle

J'essaie donc de prendre une lettre de l ' alphabet , saisie par l'utilisateur, puis de trouver la lettre à 10 lettres , et je veux qu'elle enroulez autour de l'alphabet si la lettre est «z» ou «y» ou quelque chose qui est J'ai du mal avec la partie en boucle. Je sais que l'alphabet est simplement jeté dans la table ASCII avec des nombres qui ne sont pas 1-26, donc je ne sais pas comment y faire face. C'est ce que j'ai jusqu'à présent.

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);

}

Quelqu'un peut-il m'aider?


1 commentaires

@JohnForbes Salut John. Si vous regardez dans mon code, vous pouvez voir que j'ai utilisé modulo pour le wrapping. Le problème est que dans la table ASCII l'alphabet n'est pas numéroté 1-26. Mais j'ai une idée maintenant


4 Réponses :


1
votes

Nous pouvons essayer de mapper les caractères de l'alphabet en minuscules et en majuscules sur une échelle de 1 à 26, puis décaler et éventuellement envelopper en utilisant le module. Enfin, nous gardons une trace du montant du décalage, afin de pouvoir l'ajouter à nouveau pour générer le caractère décalé.

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);


1 commentaires

C'est une manière très élégante de faire cela. Merci, cela fonctionne parfaitement!



0
votes

À la place, vous pouvez simplement utiliser la valeur de combinaison.

String userLetter = ...;
int charValue = userLetter.charAt(0);
String next = String.valueOf((char)(charValue + 10));

Ensuite, juste une instruction if pour détecter quand elle atteint A ou Z et la modifier en conséquence.

J'espère que cela vous aidera.


0 commentaires

0
votes

il s'appelle CaesarCipher s est le nombre de vos équipes

//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)); 
    } 
} 


0 commentaires

0
votes

Essayez ceci:

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);
}


0 commentaires