2017-04-27 1 views
0

J'ai écrit un code pour le chiffrement César où la première entrée est la longueur de la chaîne sans espaces, la deuxième entrée est la chaîne à faire tourner & 3ème est la clé par laquelle tourner. Mon code fonctionne sauf le dernier caractère de la chaîne. Pour cela, un personnage étrange vient à la place d'un alphabet. S'il vous plaît aider !!! .. Je suis à ma fin d'esprit .. juste ne peut pas comprendre! Voici le code: -dernier caractère ne tourne pas correctement

import java.io.*; 
    import java.util.*; 
    public class Solution { 
    public static void main(String[] args) { 
    int length,rotate,i,x; 
    Scanner scan=new Scanner(System.in); 
    String s; 
    length=scan.nextInt(); 
    s=scan.next(); 
    rotate=scan.nextInt(); 
    char c[]=s.toCharArray(); 
    for(i=0;i<length;i++) { 
    x=c[i]; 
    if(((x>65)||(x==65))&&((x==90)||(x<90))) { 
    x=x+rotate; 
    if(x>90) 
    x=x-90; 
    } 
    else if(((x>97)||(x==97))&&((x==122)||(x<122))) { 
    x=x+rotate; 
    if(x>122) 
    x=x-122; 
    } 
    c[i]=(char)x; 
    } 
    System.out.println(); 
    for(i=0;i<length;i++) 
    System.out.print(c[i]); 
    } 
    } 
entrée

est: -

11 
    middle-Outz 
    2 

sortie doit être: -

okffng-Qwvb 

mais ma sortie est à venir comme: -

okffng-Qwv 

aidez s'il vous plaît !!! s'il vous plaît ... quelqu'un dit quelle est l'erreur dans mon code!

+1

Veuillez prendre le temps de formater correctement votre code avant de le poster. –

Répondre

0

Vous n'avez actuellement aucune logique pour gérer le cas où une lettre passe au début de l'alphabet si le décalage de rotation dépasse un certain seuil. Votre logique devrait être d'ajouter à la valeur de base (c'est-à-dire la première lettre) le reste du décalage initial plus le montant de la rotation divisé par la taille de l'alphabet. Quelque chose comme ceci:

public static void main(String[] args) { 
    int length, rotate, i, x; 
    Scanner scan = new Scanner(System.in); 
    String s; 
    // don't input the length of the array, let it tell you what its length is 
    //length = Integer.parseInt(scan.nextLine()); 
    s = scan.nextLine(); 
    // make sure you really enter a pure integer here, to avoid a crash 
    rotate = Integer.parseInt(scan.nextLine()); 
    char c[] = s.toCharArray(); 
    for (i=0; i < c.length; i++) { 
     x = c[i]; 
     int base; 
     if (x >= 65 && x <= 90) { 
      base = 65; 
     } 
     else if (x >= 97 && x <= 122) { 
      base = 97; 
     } 
     else { 
      continue; 
     } 
     int diff = x - base; 
     x = base + (rotate + diff) % 26; 
     c[i] = (char)x; 
    } 
    System.out.println(); 
    for (i=0; i < c.length; i++) 
     System.out.print(c[i]); 
} 

Notez que j'ai choisi de ne pas modifier un caractère qui ne soit une lettre en anglais minuscules ou majuscules. Dans le cas d'autres personnages, ils ne seraient pas pivotés.

Suivez le lien ci-dessous pour une démonstration qui montre que l'entrée middle-Outz est correctement transformée en okffng-Qwvb.

Rextester

Mise à jour:

Comme vous l'avez à juste titre, vous avez eu aussi quelques problèmes avec votre logique Scanner. Un modèle sûr pour l'utiliser pour toujours lire tout dans une ligne de texte, puis analyser/formater l'entrée selon les besoins. L'exception d'incompatibilité d'entrée que vous receviez était probablement due à une mauvaise utilisation du scanner.

+0

Ce code est parfait, mais j'ai quelques doutes ... je serais reconnaissant si elles ont été effacées .. – Priya

+0

@Priya Laissez-moi savoir vos questions et je peux essayer de les effacer. –

+0

(1) le code que j'ai d'abord posté en question me donnait une exception d'incompatibilité d'entrée dans netbeans ... pouvez-vous dire pourquoi? (2) Qu'arrive-t-il à l'entier de base dans votre code écrit si ce n'est pas un alphabet? (3) La fonction .length() fonctionne sans les parenthèses() ..... est-ce que ce travail fonctionne partout ou uniquement dans les boucles for() n'est pas nécessaire? Est-ce valable pour d'autres fonctions Java comme toCharArray, toUpperCase etc? – Priya