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 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?
4 Réponses :
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);
C'est une manière très élégante de faire cela. Merci, cela fonctionne parfaitement!
À 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.
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)); } }
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); }
@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