Estoy atascado en un ejercicio y no me sale. Os pongo el enunciado y dónde me he quedado atascado.
El enunciado es el siguiente: "Realiza un programa que me pida una cadena (String) y me saque por consola todas las palabras que tiene dicha cadena, además de decir cuantas veces aparecen cada uno de los caracteres que tiene la cadena. Utiliza para ello los métodos subString, charAt y length".
Tengo el siguiente código:
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\n");
System.out.println("Introduce una frase");
String cadena = sc.next();
int a = 0;
int A = 0;
int b = 0;
int B = 0;
int c = 0;
int C = 0;
int d = 0;
int D = 0;
int e = 0;
int E = 0;
int f = 0;
int F = 0;
int g = 0;
int G = 0;
int h = 0;
int H = 0;
int i = 0;
int I = 0;
int j = 0;
int J = 0;
int k = 0;
int K = 0;
int l = 0;
int L = 0;
int m = 0;
int M = 0;
int n = 0;
int N = 0;
int ñ = 0;
int Ñ = 0;
int o = 0;
int O = 0;
int p = 0;
int P = 0;
int q = 0;
int Q = 0;
int r = 0;
int R = 0;
int s = 0;
int S = 0;
int t = 0;
int T = 0;
int u = 0;
int U = 0;
int v = 0;
int V = 0;
int w = 0;
int W = 0;
int x = 0;
int X = 0;
int y = 0;
int Y = 0;
int z = 0;
int Z = 0;
for (int contador = 0; contador < cadena.length(); contador++) {
if (cadena.charAt(i) == 'a') {
a++;
}
if (cadena.charAt(i) == 'A') {
A++;
}
if (cadena.charAt(i) == 'b') {
b++;
}
if (cadena.charAt(i) == 'B') {
B++;
}
if (cadena.charAt(i) == 'c') {
c++;
}
if (cadena.charAt(i) == 'C') {
C++;
}
if (cadena.charAt(i) == 'd') {
d++;
}
if (cadena.charAt(i) == 'D') {
D++;
}
if (cadena.charAt(i) == 'e') {
e++;
}
if (cadena.charAt(i) == 'E') {
e++;
}
if (cadena.charAt(i) == 'f') {
f++;
}
if (cadena.charAt(i) == 'F') {
F++;
}
if (cadena.charAt(i) == 'g') {
g++;
}
if (cadena.charAt(i) == 'G') {
G++;
}
if (cadena.charAt(i) == 'h') {
h++;
}
if (cadena.charAt(i) == 'H') {
H++;
}
if (cadena.charAt(i) == 'i') {
i++;
}
if (cadena.charAt(i) == 'I') {
I++;
}
if (cadena.charAt(i) == 'j') {
j++;
}
if (cadena.charAt(i) == 'J') {
J++;
}
if (cadena.charAt(i) == 'k') {
k++;
}
if (cadena.charAt(i) == 'K') {
K++;
}
if (cadena.charAt(i) == 'l') {
l++;
}
if (cadena.charAt(i) == 'L') {
L++;
}
if (cadena.charAt(i) == 'm') {
m++;
}
if (cadena.charAt(i) == 'M') {
M++;
}
if (cadena.charAt(i) == 'n') {
n++;
}
if (cadena.charAt(i) == 'N') {
N++;
}
if (cadena.charAt(i) == 'ñ') {
ñ++;
}
if (cadena.charAt(i) == 'Ñ') {
Ñ++;
}
if (cadena.charAt(i) == 'o') {
o++;
}
if (cadena.charAt(i) == 'O') {
O++;
}
if (cadena.charAt(i) == 'p') {
p++;
}
if (cadena.charAt(i) == 'P') {
P++;
}
if (cadena.charAt(i) == 'q') {
q++;
}
if (cadena.charAt(i) == 'Q') {
Q++;
}
if (cadena.charAt(i) == 'r') {
r++;
}
if (cadena.charAt(i) == 'R') {
R++;
}
if (cadena.charAt(i) == 's') {
s++;
}
if (cadena.charAt(i) == 'S') {
S++;
}
if (cadena.charAt(i) == 't') {
t++;
}
if (cadena.charAt(i) == 'T') {
T++;
}
if (cadena.charAt(i) == 'u') {
u++;
}
if (cadena.charAt(i) == 'U') {
U++;
}
if (cadena.charAt(i) == 'v') {
v++;
}
if (cadena.charAt(i) == 'V') {
V++;
}
if (cadena.charAt(i) == 'w') {
w++;
}
if (cadena.charAt(i) == 'W') {
W++;
}
if (cadena.charAt(i) == 'x') {
x++;
}
if (cadena.charAt(i) == 'X') {
X++;
}
if (cadena.charAt(i) == 'y') {
y++;
}
if (cadena.charAt(i) == 'Y') {
Y++;
}
if (cadena.charAt(i) == 'z') {
z++;
}
if (cadena.charAt(i) == 'Z') {
Z++;
}
}
System.out.println("La frase tiene el siguiente número de letras");
System.out.println("a: " + a);
System.out.println("A: " + A);
System.out.println("b: " + b);
System.out.println("B: " + B);
System.out.println("c: " + c);
System.out.println("C: " + C);
System.out.println("d: " + d);
System.out.println("D: " + D);
System.out.println("e: " + e);
System.out.println("E: " + E);
System.out.println("f: " + f);
System.out.println("F: " + F);
System.out.println("g: " + g);
System.out.println("G: " + G);
System.out.println("h: " + h);
System.out.println("H: " + H);
System.out.println("i: " + i);
System.out.println("I: " + I);
System.out.println("j: " + j);
System.out.println("J: " + J);
System.out.println("k: " + k);
System.out.println("K: " + K);
System.out.println("l: " + l);
System.out.println("L: " + L);
System.out.println("m: " + m);
System.out.println("M: " + M);
System.out.println("n: " + n);
System.out.println("N: " + N);
System.out.println("ñ: " + ñ);
System.out.println("Ñ: " + Ñ);
System.out.println("o: " + o);
System.out.println("O: " + O);
System.out.println("p: " + p);
System.out.println("P: " + P);
System.out.println("q: " + q);
System.out.println("Q: " + Q);
System.out.println("r: " + r);
System.out.println("R: " + R);
System.out.println("s: " + s);
System.out.println("S: " + S);
System.out.println("t: " + t);
System.out.println("T: " + T);
System.out.println("u: " + u);
System.out.println("U: " + U);
System.out.println("v: " + v);
System.out.println("V: " + V);
System.out.println("w: " + w);
System.out.println("W: " + W);
System.out.println("x: " + x);
System.out.println("X: " + X);
System.out.println("y: " + y);
System.out.println("Y: " + Y);
System.out.println("z: " + z);
System.out.println("Z: " + Z);
}
}
No he realizado aún lo de separar las palabras, aunque para ello he puesto el "useDelimiter". Con lo que estoy atascado (y rallado, llevo varias horas dándole vueltas pero no sé en qué me equivoco) es que no sé en qué fallo, porque ejecuto este código con la siguiente frase de ejemplo "Mi ciudad es bonita" y me suma todas las letras a M en vez de sumar las letras a cada letra que corresponda (es decir, M: 1, i:3 etc.). Muchas gracias, un saludo.