Artemis Hunter:
Problema
Escribí este programa para comprobar el número de veces que cada letra aparece en una cadena de entrada por parte del usuario. Funciona bien, pero hay una soluciones más eficientes o alternativas de ir sobre esta tarea que reiterando a través de un veintiséis elemento de duración matriz para cada personaje?
Código
import java.util.Scanner;
public class Letters {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
char[] c = {'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[] f = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
System.out.println("Enter a string.");
String k = sc.nextLine();
String s = k.toUpperCase();
s = s.trim();
int l = s.length();
System.out.println("Checking string = " + s);
char ch;
for (int i = 0; i < l; i++) {
ch = s.charAt(i);
for (int j = 0; j < c.length; j++) {
if (ch == c[j]) {
f[j]++;
}
}
}
System.out.println("Char\tFreq");
for (int i = 0; i < c.length; i++) {
if (f[i] != 0) {
System.out.println(c[i] + "\t" + f[i]);
}
}
}
}
Elliott fresca:
No es necesario que explícitamente initialize 26 entradas en la matriz de frecuencia (el valor predeterminado es cero); También no es necesario para mantener la tabla de caracteres (es suficiente conocer el desplazamiento). Es decir, su código puede eliminar c
por completo y calcular cada letra; me gusta,
Scanner sc = new Scanner(System.in);
int[] f = new int[26];
System.out.println("Enter a string.");
String orig = sc.nextLine();
String k = orig.trim().toUpperCase();
System.out.println("Checking string = " + orig);
for (char ch : k.toCharArray()) {
f[ch - 'A']++;
}
System.out.println("Char\tFreq");
for (int i = 0; i < f.length; i++) {
if (f[i] != 0) {
System.out.println((char) ('A' + i) + "\t" + f[i]);
}
}