Java - Ejercicio - Caracteres repetidos "no consigo repetir los caracteres totales" (adjunto código)

 
Vista:
sin imagen de perfil
Val: 25
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ejercicio - Caracteres repetidos "no consigo repetir los caracteres totales" (adjunto código)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 18:25:37
Buenas tardes! Soy estudiante de programación y llevo trabada en este ejercicio desde ayer, casi tengo el resultado pero no logro verlo.

El ejercicio trata sobre pedir por scanner una frase String, y el programa debe mirarte el numero de veces que se repite cada letra por el momento tengo esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Scanner;
 
public class Act4 {
 
	public static void main(String[] args){
 
		Scanner lector = new Scanner(System.in);
 
		System.out.println("Introduce una frase: ");
		String frase = lector.nextLine();
 
		contarCaracteres(frase);
 
		lector.close();
    }
 
    public static void contarCaracteres(String frase) {
    	int contador = 0, y = 0;
    	char [] abecedario = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
 
		for(int x=0;x<abecedario.length;x++) {
			for(y = 0;y<frase.length();y++) {
			  if ((frase.charAt(y)==abecedario[x])){
			    		contador=+1;
			    	System.out.println("La letra "+abecedario[x]+" tiene "+contador+" letras");
			  }
			  else if((frase.charAt(y)==abecedario[x] && y !=(abecedario[x]))) {
				  System.out.println("");
			  }
			}
		}
    }
}

como resultado me da lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
Introduce una frase:
hola que tal
La letra a tiene 1 letras
La letra a tiene 1 letras
La letra e tiene 1 letras
La letra h tiene 1 letras
La letra l tiene 1 letras
La letra l tiene 1 letras
La letra o tiene 1 letras
La letra q tiene 1 letras
La letra t tiene 1 letras
La letra u tiene 1 letras

no consigo juntar las letras repetidas en una, y que cuente el numero máximo de letras de cada clase.
Alguna ayuda?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 2.520
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ejercicio - Caracteres repetidos "no consigo repetir los caracteres totales" (adjunto código)

Publicado por Kabuto (649 intervenciones) el 09/11/2019 21:49:09
Hola.
Una solución que se me ocurre es utilizar un segundo array de int con la misma longitud que el array abecedario.

Así lo que haces es:
- Obtener una letra de la frase.
- Comprobar en que posición del array abecedario se encuentra esa letra.
- Incrementas el valor int que ocupa esa misma posición pero en el array de enteros.

Cuando esto termina, ahora recorres el array de enteros, buscando que posiciones son mayor que 0, es decir, allá donde se han contado letras.
Pues con esa misma posición, puedes informar en pantalla de la letra que representa y la veces que se repite.

El código podría ser así (no lo mires si quieres intentar resolverlo tú primero :P ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class ContarLetras {
 
	public static void main(String[] args){
 
		Scanner lector = new Scanner(System.in);
 
		System.out.println("Introduce una frase: ");
		String frase = lector.nextLine();
 
		contarCaracteres(frase);
 
		lector.close();
	}
 
	public static void contarCaracteres(String frase) {
 
		char[] abecedario = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
		int[] contadores = new int[abecedario.length];
 
		for (int i = 0; i < frase.length(); i++) {
			//Obtenemos caracter en minuscula.
			char caracter = frase.toLowerCase().charAt(i);
			//Obtenemos posicion en abecedario y aumentamos la equivalente en contadores
			for (int j = 0; j < abecedario.length; j++) {
				if (caracter == abecedario[j])
					contadores[j]++;
			}
		}
 
		//Caracteres contados, comprobamos que contadores son distintos de 0 e informarmos
		for (int i = 0; i < contadores.length; i++) {
			if (contadores[i] > 0) {
				System.out.println("La letra " + abecedario[i] + " aparece " + contadores[i] + " veces.");
			}
		}
	}
}

Y en pantalla sale este resultado:
1
2
3
4
5
6
7
8
9
10
Introduce una frase:
Hola que tal
La letra a aparece 2 veces.
La letra e aparece 1 veces.
La letra h aparece 1 veces.
La letra l aparece 2 veces.
La letra o aparece 1 veces.
La letra q aparece 1 veces.
La letra t aparece 1 veces.
La letra u aparece 1 veces.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.029
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ejercicio - Caracteres repetidos "no consigo repetir los caracteres totales" (adjunto código)

Publicado por Billy Joel (572 intervenciones) el 21/11/2019 23:34:48
Yo lo resuelvo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.LinkedHashMap;
import java.util.Scanner;
 
public class Act4 {
    public static void main(String[] args) {
        Scanner lector = new Scanner(System.in);
        LinkedHashMap<Character, Integer> m = new LinkedHashMap();
        System.out.println("Introduce una frase: ");
        String frase = lector.nextLine();
        for (char c : frase.toCharArray()) {
            m.put(c, m.containsKey(c) ? m.get(c) + 1 : 1);
        }
        lector.close();
        m.forEach((c, v) -> {
            System.out.println("La letra " + c + " tiene " + v + " letras");
        });
    }
}

PD: Esta linea m.put(c, m.containsKey(c) ? m.get(c) + 1 : 1); la explico así:
1
2
3
4
5
6
7
int repeticiones;
if(m.containsKey(c)){
     repeticiones = m.get(c);
} else {
    repeticiones = 1;
}
m.put(c, repeticiones);

Acá te dejo un poquito de Maps

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar