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 ASCIIl'alphabet n'est pas numéroté 1-26. Mais j'ai une idée maintenant