2011-09-05 3 views
0

Je travaille sur un petit programme java, c'est très basique et l'une de mes fonctions décale l'alphabet d'une touche donnée. Je l'ai fait fonctionner, mais son déplacement dans le mauvais sens, comment puis-je le faire changer l'autre direction? Im devinant c'est très simple, mais c'est confus moi!shift array by k

Par exemple; avec une clé 19 produit; hijklmnopqrstuvwxyzabcdefg

quand devrait produire; TUVWXYZABCDEFGHIJKLMNOPQRS

+0

Avez-vous essayé de remplacer '+ key' par' -key'? – wormsparty

+0

De quelle façon est-ce que ça bouge maintenant et de quelle façon voulez-vous que ça change? –

+0

Notez que vous pouvez vous limiter à l'utilisation du tableau ourAlphabet en sauvegardant et en échangeant des valeurs (comme des sortes). –

Répondre

2

Il devrait fonctionner si vous utilisez result[(i-key+26)%length] = ourAlphabet[i];

Cependant, si la longueur = 26 ce serait encore donner un résultat erroné.

Je remplacerais donc le 26 par la longueur;

result[(i-key+length)%length] = ourAlphabet[i]; 
+0

En effet. Les valeurs codées en dur sont une mauvaise pratique. –

8

Modification:

result[i] = ourAlphabet[(i+key)%length]; 
0
public static char[] ourAlphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 


public char[] shiftAlphabet(int key) { 

     int length = ourAlphabet.length; 

     char[] result = new char[length]; 

     for (int i=0; i < length; i++) 
     { 
      ourAlphabet[(i+key+26)%length] = result[i]; 
     } 

     return result; 
} 
+0

Les caractères dans 'result' n'ont pas été initialisés. – Marcelo

+0

Cela écrasera probablement les caractères. Une variable temporaire serait nécessaire dans la boucle for. –