Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: SeñorX95 en 11 Marzo 2015, 22:27 PM

Título: Java
Publicado por: SeñorX95 en 11 Marzo 2015, 22:27 PM
Como le doy valores numericos a las letras asi:
a=1, b=2...z=26
A=27,B=28...
0=0,1=1....
Y a los demas valores el valor 10
Título: Re: Java
Publicado por: Shell Root en 11 Marzo 2015, 22:32 PM
Explica mejor lo que quieres hacer!
Título: Re: Java
Publicado por: SeñorX95 en 11 Marzo 2015, 22:36 PM
Teniendo un string

A cada letra (excepto la 'ñ') se le asocia un número entero: 'a'->1,'b'->2, ...,'z'->26, 'A'-27, 'B'->29, ...

A cada dígito se le asocia el valor entero correspondiente: '0'->0, '1'->1, ...

Al resto de caracteres se le asocia el valor entero 10

Título: Re: Java
Publicado por: Usuario Invitado en 11 Marzo 2015, 22:50 PM
Bueno, ya es hora de que pienses un poco, ¿no crees?. Coloca lo que has avanzado para que te ayuden.
Título: Re: Java
Publicado por: SeñorX95 en 12 Marzo 2015, 15:02 PM
Tengo este codigo se podria hacer mejor?

Código (java) [Seleccionar]
for (int i=0; i<s.length();i++) {
            char n1;
            n1=s.charAt(i);
           
            boolean x=false;
            if(n1>'0' && n1<'9'){
                suma+=Integer.parseInt(""+n1);
            }else{
                if((n1<'a' || n1>'z') && (n1<'A' || n1>'Z')){
                    suma+=10;
                }else{
                    for(int j=0;x==false;){
                        char n2;
                        n2=letras.charAt(j);
                        if(n1!=n2){
                            j++;
                        }else{
                            x=true;
                            suma+=(j+1);
                        }
                    }
                }
            }
        }
Título: Re: Java
Publicado por: ivancea96 en 12 Marzo 2015, 15:26 PM
Código (java) [Seleccionar]
if(n1>='0' && n1<='9'){
Mayor o igual y menor o igual. El '0' y el '9' están incluidos.


No es necesario que tengas la cadena 'letras'. Basta restarle a la letra, si es minúscula, 'a'-1, y si es mayúscula, 'A'-1. Así obtendrás obtendrás el número de la letra sin más complicacioón:

Código (java) [Seleccionar]
char c = 'b';
int n = c-'a'+1; // n=2
Título: Re: Java
Publicado por: Usuario Invitado en 12 Marzo 2015, 19:21 PM
Primero, evalúa si el dígito es una letra. Si es así, evalúa si es minúscula o mayúscula. Si es minúscula se empezará a contar desde 1 y si es minúscula desde 27. Si no es una letra, el código será 10.

Código (java) [Seleccionar]
public class Digits {
   
    private final static char LOWER_CASE_START_LETTER = 'a';
    private final static int LOWER_CASE_START_CODE = 1;
    private final static char UPPER_CASE_START_LETTER = 'A';
    private final static int UPPER_CASE_START_CODE = 27;
   
    public static Integer getCodeOf(char digit) {
        Integer code = null;
        if(Character.isLetter(digit)) {
            char startLetter = (Character.isLowerCase(digit)) ? LOWER_CASE_START_LETTER : UPPER_CASE_START_LETTER;
            if(Character.isLowerCase(startLetter))
                code = getLetterCode(startLetter, digit, LOWER_CASE_START_CODE);
            else
                code = getLetterCode(startLetter, digit, UPPER_CASE_START_CODE);
        } else { code = 10; }
       
        return code;
    }
   
    private static int getLetterCode(char startLetter, char digit, final int START_CODE) {
        Integer code = null;
        if(startLetter == digit)
            code = START_CODE;
        else
            code = START_CODE + getGapBetweenLetters(digit, startLetter);
       
        return code;
    }
   
    private static int getGapBetweenLetters(char first, char second) {
        return first - second;
    }
           
}


Hagamos alguna prueba:

Código (java) [Seleccionar]
public class Test {
    public static void main(String[] args) {
        String word = "Hello world%".replaceAll(" ","");
        System.out.println(word);
        char[] wordLetters = word.toCharArray();
        int sum = 0;
        for(byte i=0; i<wordLetters.length; i++)
            sum += Digits.getCodeOf(wordLetters[i]);
        System.out.println("La suma es: "+sum);
    }
}


Resultado de la ejecución:

Helloworld%
La suma es: 160


Comprobemos:

H = 34
e = 5
l = 12
l = 12
o = 15
w = 23
o = 15
r = 18
l = 12
d = 4
% = 10


Suma de códigos: 160