2010-12-14 38 views
1

Je possède ceComment puis-je retourner la valeur d'une méthode à une autre et échange

public class Mapper implements ScramblerIF 
{ 
private static String map = "drsjckpwrypwsftylmzxopqtdo"; 

public static String charAt(String str) 
{ 
//char[] chars = str.toCharArray(); 
int length = str.length(); 

for(int i=0; i<length; i++) 
{ 
char aChar = str.charAt(i); 
char upper = Character.toUpperCase(aChar); 
int num = (upper - 'A'); 
char mChar = map.charAt(num); 
//String chard = Character.toString(mChar); 

StringBuffer buf = new StringBuffer(str); 
    buf.setCharAt(i, mChar); 
} 
    return str; 
} 

public String scramble(String str) { 
return charAt(str); 
} 
} 

Je suis en train de le faire à l'endroit où la méthode

public String scramble(String str) { 
return charAt(str); 
} 

renvoie la valeur calculée de la

procédé
public static String charAt(String str) 

. Je ne sais pas où je me suis trompé.

également au lieu d'utiliser

StringBuffer buf = new StringBuffer(str); 
    buf.setCharAt(i, mChar); 

comment pourrais-je être en mesure d'utiliser la fonction d'échange? Lorsque je tente

char temp = chars[i]; 
chars[i] = chars[mChar]; 
chars[mChar] = temp; 

Je me donne un ArrayIndexOutOfBoundsException. Résumé de ce que je suis en train de faire est « Pour chaque caractère dans la chaîne d'origine, utilisez sa position dans l'alphabet pour rechercher son remplacement dans la chaîne de la carte. Par exemple, la chaîne « chien » serait traduit à « jtp » "

+0

Le problème n'est pas en retour une valeur de retour d'une autre méthode. Pourriez-vous publier la pile-trace de 'ArrayIndexOutOfBoundsException'? – khachik

+0

Votre chaîne contient-elle des caractères non alphabétiques? – khachik

+0

comment irais-je faire cela? désolé un peu lent à ce – Dmoney

Répondre

0

StringBuffer.setCharAt() va lancer une exception si vous essayez de définir un caractère au-delà de la mémoire tampon. Vous n'avez rien mis dans le tampon.

De plus, jetez un oeil à quand vous créez le tampon.

+0

comment pourrais-je mettre quelque chose dans le tampon? – Dmoney

+0

La première étape consiste à consulter la documentation de la classe - http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html. Jetez un oeil aux méthodes "append". –

1

Ce scrables avec le remplacement -carte que vous avez fournies. Il gère également supérieure et inférieure lettres minuscules:

public class Mapper { 
    //       abcdefghijklmnopqrstuvwxyz 
    private static String map = "drsjckpwrypwsftylmzxopqtdo"; 

    public static String scramble(String str) { 

     if (!str.matches("[A-Za-z]*")) 
      throw new RuntimeException(str + " contains weird characters"); 

     String out = ""; 
     for (char c : str.toCharArray()) { 
      if (Character.isUpperCase(c)) { 
       out += Character.toUpperCase(map.charAt(c - 'A')); 
      } else { 
       out += map.charAt(c - 'a'); 
      } 
     } 

     return out; 

    } 

    public static void main(String[] args) { 
     System.out.println(scramble("David")); 
    } 
} 
+0

Notez que '%' le rend asymétrique. – khachik

+0

Oui, j'ai ajouté cela dans le commentaire il y a quelques secondes! ;) – dacwe

+0

@khachik: ajouté vérifier qu'aucun caractère n'est "bizarre"! – dacwe