Foros del Web » Programación para mayores de 30 ;) » Java »

Caracteres repetidos

Estas en el tema de Caracteres repetidos en el foro de Java en Foros del Web. Hola buenas , estoy tratando de realizar un programilla que de una cadena de texto me muestre que carater es el que mas se repite ...
  #1 (permalink)  
Antiguo 19/09/2012, 12:50
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Caracteres repetidos

Hola buenas , estoy tratando de realizar un programilla que de una cadena de texto me muestre que carater es el que mas se repite cosecutivamente
ejemplo:
holaaaa como estassssssssssss


y me indique que el carater mas repetido es la 's'.

Si solo necesitara contabilizarlo no seria problema extraeria el caracter con CharAt y lo compararia con el siguiente y si fuera el mismo , le sumaria un contador, pero lo que no se es que me devuelva que letra es la mas repetida.

Alguna idea?
gracias de antemano.
  #2 (permalink)  
Antiguo 20/09/2012, 01:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Caracteres repetidos

Se puede afrontar de muchas maneras, por ejemplo. Crea dos arraylists, uno para los caracteres y otro para el numero.

Cuando recorres tu string encontrando un nuevo caracter compruebas si lo has añadido al arrayList. Si no lo has añadido antes, lo añades y añades un 1 para el arraylist de numero de veces encontrado. Si lo has añadido antes, puedes usar indexOf para encontrar la posicion del elemento en el array, y con ese indice incrementas en una unidad el contador de las repeticiones en el otro array.

Cuando hayas recorrido todo tu string, entonces comparas el numero de repeticiones y te quedas con el indice del mayor número (tendrías que ver que hacer si hay empate ... eso a tu gusto). A partir de ese índice ya obtienes el carácter más repetido.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 20/09/2012, 06:37
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Caracteres repetidos

Hola gracias por tu ayuda,pero soy novatillo y me cuesta todavia pillar como haer algunas cosas,¿ me lo podrias esquematizar un poco,? gracias.
  #4 (permalink)  
Antiguo 20/09/2012, 08:18
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Caracteres repetidos

Empieza por intentar hacer algo y pon aquí donde te atasques para que te vayamos diciendo donde fallas y como debes corregirlo. Si no, lo único que haremos es darte los problemas resueltos y así no vas a aprender.

Empieza por crear dos ArrayLists: Uno será un ArrayList<char> y el otro un ArrayList<Integer>
Convierte también tu String con el texto en un charArray.

(Si no sabes como hacer esto busca en google)... cuando lo tengas pega el código y seguimos.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 20/09/2012, 11:16
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Caracteres repetidos

Hola de nuevo, de momento este es lo que he conseguido. Aqui ya me quedo pillado.


Código:
import java.util.Scanner;
public class caracter_repetidos {
    public static void main(String[]args){
        Scanner lector=new Scanner(System.in);
        String s = "";
        char []caracteres={};
        int [] repeticiones = {};
        char [] Arraycadena ;
        
        
        System.out.print("Escribe una frase");
         s= lector.nextLine();
         Arraycadena=s.toCharArray();

          for(int i=0;i> Arraycadena.length;i++){
              if(Arraycadena[i]!= caracteres[i]){
                  caracteres[i]= Arraycadena[i];
                  repeticiones[i]=i+1;
              }
      
        
            
}}
}
  #6 (permalink)  
Antiguo 21/09/2012, 02:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Caracteres repetidos

Lo prometido es deuda, ahi va la corrección:

Si usas java 5 o superior mejor usa ArrayLists con generics que meros arrays. Si no tienes generics entonces tienes que castear cada elemento al recuperarlo a la clase deseada.

char []caracteres={}; => List<char> caracteres = new ArrayList<char>();
int [] repeticiones = {}; => List<Integer> repeticiones = new ArrayList<Integer>();

Arraycadena lo dejo porque toCharArray convierte directamente a esta clase y es más engorro pasar al otro. De todos modos por convenio se le debería llamar "arrayCadena".

Luego:

for(int i=0;i< Arraycadena.length;i++){ // OJO con lo que pones aqui, ese > era un peligro porque te saldrias del indice del array de caracteres
char caracterEvaluado = Arraycadena[i];
if (caracteres.contains(caracterEvaluado)) { // Por este motivo uso un ArrayList
int indiceEvaluado = caracteres.indexOf(caracterEvaluado); // creo que era así, revisalo usando la documentacion de la clase.
caracteres.set(indiceEvaluado, caracteres.get(indiceEvaluado)+1);
} else {
caracteres.add(caracterEvaluado);
repeticiones.add(1);
}
}

Con esto deberias tener ya cubiertos los dos arrays.

Ahora haz la parte que comprueba el caracter con más repeticiones ;) y lo muestra por pantalla.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 21/09/2012, 02:38
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Caracteres repetidos

Ah, se me ovidaba

Tus tres amigos en la programación

- Internet (quien dice internet dice buscar en google)
- La documentación de las clases (la API del lenguaje. Si quieres hacer algo mira qué clases pueden lograrlo y qué métodos debes usar. Tu primer amigo y éste van de la mano)
- Tu cerebro (para quien lo tenga)

Tus tres enemigos

- Internet (no todo lo que encuentres te va a valer, así que tu tercer amigo te tiene que ayudar a discernir lo que vale de lo que no)
- Las prisas (tómatelo con calma, no pretendas escribir el código sin antes saber qué quieres hacer exactamente, en ese caso estarás dando pasos de ciego)
- Tu cerebro (cometerás errores, no lo dudes, aún después de años de experiencia, así que tu tercer amigo te tiene que volver a sacar del apuro. El vencer los miedos y la perseverancia logran milagros)

Esto es cosecha mía, si alguien opina otra cosa es libre de hacerlo ;)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 21/09/2012, 03:53
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Caracteres repetidos

Hola darte las gracias por tu paciencia y asesoramiento, no conocia esta diferencia entre array y arraylist, no sale en la documentacion de la asignatura, y por lo tanto no conocia estos metodos.

bueno analizare el codigo que has dejado y ya ire haciendo.

gracias.

Etiquetas: caracteres, repetidos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:01.