Java

Iniciado por SeñorX95, 11 Marzo 2015, 22:27 PM

0 Miembros y 1 Visitante están viendo este tema.

SeñorX95

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

Shell Root

Explica mejor lo que quieres hacer!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

SeñorX95

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


Usuario Invitado

Bueno, ya es hora de que pienses un poco, ¿no crees?. Coloca lo que has avanzado para que te ayuden.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

SeñorX95

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);
                        }
                    }
                }
            }
        }

ivancea96

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

Usuario Invitado

#6
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
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein