• Viernes 8 de Noviembre de 2024, 21:44

Autor Tema:  pasar de letras a ascii y realizar operacion (TEMA RESUELTO)  (Leído 4189 veces)

andrescabana215

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
pasar de letras a ascii y realizar operacion (TEMA RESUELTO)
« en: Lunes 6 de Junio de 2011, 07:47 »
0
Hola de nuevo... eh encontrado este codigo en un tutorial de la web....

SE TRATA DE UN CONTADOR DE CARACTERES QUE DENTRO DE UNA FRASE O PARRAFO CUENTA CUANTAS VECES SE REPITE LA LETRA O CARACTER EN TOTAL
ESTO LO LOGRA GRACIAS A QUE TRANSFORMA CARACTERES A NUMEROS... LEAN BIEN EL CODIGO Y LAS DUDAS DESPEJADAS MAS ABAJO GRACIASS

Código: Java
  1.  public static void main(String[] args) {
  2.        String frases[]={"TODOS SON IGUALES"};//array de frases que pueden ser muchas mas
  3.        
  4.       int contadorLetras[]= new int [26];//array de letras que llena despues
  5.      
  6. //aca viene el primer bucle que transforma cada array en caracteres
  7.       for (int contador=0; contador < frases.length;contador++){
  8.           String actual = frases[contador];
  9.           char letras[]= actual.toCharArray();
  10. //aca viene otro bucle que recorre cada letra y la coloca dentro de let
  11.           for (int contador2=0; contador2<letras.length; contador2++){
  12.               char let=letras[contador2];
  13.  
  14. //trozo de codigo que no entiendo como funciona???
  15.               if ((let>='A')&(let<='Z')){
  16.                   contadorLetras[let - 'A']++;
  17.               }
  18.           }
  19.       }
  20.  
  21. //bucle nuevo que imprime algo que nose como lo imprime porque usa el mismo metodo que el anterior... -.-
  22.       for (char contador='A';contador<='Z';contador++){
  23.           System.out.println(contador+":"+contadorLetras[contador - 'A']+" ");
  24.       }
  25.       System.out.println("");
  26.      
  27.     }
  28.  

Resulta que no puedo entender una parte de lo que dice...

contadorLetras[let - 'A']++;

y repite lo mismo en...

System.out.println(contador+":"+contadorLetras[contador - 'A']+" ");


entiendo todo lo demas.. solo que no entiendo qe es lo que hace cuando pone dentro del [] en signo negativo detras del 'A'

si alguien me lo puede explicar graciass
« última modificación: Lunes 6 de Junio de 2011, 22:25 por andrescabana215 »

ripr

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: que significa este trozo de codigo????
« Respuesta #1 en: Lunes 6 de Junio de 2011, 17:53 »
0
Si ya corriste el programa te das cuenta que lo que hace es contar la veces que se repite cada letra en una o varias frases, para esto se basa en el valor decimal que cada letra posee(su equivalencia en código ascii).La persona que hizo esto(que al parecer es tu maestro de programación), determina un posición de cada letra sin escribir otra mas que la A a la Z(en mayúscula)e incrementa en uno la posicion restando los valores de cada letra. por ejemplo:

Suponemos que el vector contadorLetras es el alfabeto don contadorLetras[0]es A,contadorLetras[1]es B,contadorLetras[2]es C... y asi sucesivamente entonces lo que hace básicamente en la parte que no le entiendes es que  primero determinar si la frase contiene las letras entre la A y la Z(ojo no entra en minúsculas), una vez hecho esto lo que sigue es incrementar en uno la  que representa cada letra y hace la operacion tomando como base A, donde A en ascii vale 65, B=66,C=67y asi sucesiva mente.
entonces

contadorLetras[let-'A']++
el lo mismo que
contadorLetras['T'-'A']++
y lo mismo que
contadorLetras[84-65]++
y por lo tanto
contadorLetras[19]++
esto quiere decir que
contadorLetras en la posición 19 incremente en uno(el incremento lo hace con ++)

no se si fui claro pero te aconsejo que busque la tabla de codigo ascii
Si sustituimos "TODOS SON IGUALES" por "ToDoS s0n iguales"
¿Que pasaria?


saludos y espero que te sea de ayuda.
colaborando en mi primer foro

andrescabana215

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: que significa este trozo de codigo????
« Respuesta #2 en: Lunes 6 de Junio de 2011, 22:20 »
0
para responder lo tuyo....

Si sustituimos "TODOS SON IGUALES" por "ToDoS s0n iguales"
¿Que pasaria?

reconoceria solo los caracteres en mayuscula...

eso se soluciona utilizando el metodo .toUpperCase

y la explicacion para el que no entienda paso a decirla de nuevoo...

lo que mi amigo ripr quiso decir es que

dentro de contadorLetras[let-'A'] se produce una resta donde let es el minuendo, el sustraendo es la A y para restar se representa A como caracter ascii de valor 65
y let va a contener una letra que va a ir variando segun recorra desde 0 al final todo el array que se formo con el metodo .toCharArray(); y para la resta tmb se transforma en caracter ascii
entonces queda una resta simple matematica dentro de los corchetes de contador Letras[]
al producir esta resta el resultado que nos proporciona coincide justo con el casillero dentro del array que deberia representar a la letra correspondiente  

Ej:

si la letra dentro de let=T

contadorLetras['T' - 'A']

si pasamos todo a caracteres ascii numericos queda asi

contadorLetras[84 - 65] resultado de esta resta es

contadorLetras[19]++; ---- y asi quda el codigo, y los signos "++" lo que hacen es incrementar el valor una unidad numerica, osea de 1 en 1, en este caso el lugar 19 dentro del array incrementaria
su valor actual (que de momento es cero) a 1, 0 + 1 = 1, y si tuviese otro valor ej 5, incrementaria ese valor en 1 mas... osea 6

ampliando esto si subimos en el codigo nos encontramos con la variable contadorLetras[26]; pero esta vacia completamente, quiere decir que esos 26 lugares reservador inicialmente tienen valor 0 (cero)... entonces

contadorLetras[19]++; este codigo lo que hace es al lugar 19 dentro del array de 26 contenido dentro de contadorLetras[] le proporciona un valor de 1, porque antes valia 0, entonces 0++ es 1;

finalizando el post decimos que si contamos desde 0 a 25 que serian los 26 lugares contenidos dentro del array contadorLetras[26] la letra T se encontraria en el lugar 19 por tanto...

decimos que la letra T esta una sola ves repetida en la frase... si hubiese mas T, el codigo llegaria al mismo resultado contadorLetras[19]++; lo que transformaria ese 1++ en un 2; por tanto serian dos T


MUCHAS GRACIAS RIPR LAMENTO VOLVERLO A EXPLICAR, TU EXPLICACION SE ENTIENDE EXCELENTE PERO ADICIONO UNA EXPLICACION MAS SIMPLISTA POR SI ALGUIEN NO PUDIESE O
NO ESTUVIESE ACOSTUMBRADA MUCHO A JAVA DE MOMENTO, ADEMAS DE QUE SIEMPRE DOS EXPLICACIONES SON MEJORES QUE UNA... ESPERO ESTO LE SIRVA A ALGUIEN TANTO COMO A MI

SALUDOS