Porcentagem de determinada letras em uma palavra

Estou tentando fazer um código onde o usuário entre com uma palavra e depois com uma letra que tenha nessa palavra e que o programa retorne a porcentagem de letras do tipo que ele digitou que tem na palavra:

digite uma palavra:(amor);
qual letra deseja verificar:(a);

resposta:25%

outro exemplo:
digite uma palavra:(arara);
qual letra deseja verificar:(a);

resposta:60%

esse é o código que fiz:

public class MyClass {
public static void main(String args[]) {
   String palavra="arara";
   String a;
   int n=0;
   for(int i=0;i<=palavra.length();i++){
       char b = palavra.charAt(i);
       a=String.valueOf(b);
       if(a.equals("a")){
           n++;
       }
       
       int porcentagem =((n*100)/palavra.length());
       
    System.out.println(porcentagem);
 
   }
}

}

ele até roda mas o calculo é feito loop a loop e nao sei como tirar desse loop somente o 60.Alguem pode me ajudar?

quando tento tirar o 60 pra usar em outro lugar sai até fumaça kkkk

E’ somente você separa o bloco do for e depois de terminar ele, então faça o calculo da porcentagem.

eu fiz isso :

for(){ 
           if(){
           }
}

calculo da porcentagem

Saída:

Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:44)
at java.base/java.lang.String.charAt(String.java:692)
at MyClass.main(MyClass.java:7)
Command exited with non-zero status 1

import java.io.PrintStream;
import java.util.Scanner;

public class Programa {

    public static void main(String[] args) {
        Programa programa = new Programa();
        programa.executar();
    }

    private final Scanner entrada = new Scanner(System.in);
    private final PrintStream saida = System.out;

    public void executar() {
        saida.print("digite uma palavra: ");
        String palavra = entrada.nextLine();

        saida.print("qual letra deseja verificar: ");
        char letraParaVerificar = entrada.nextLine().charAt(0);

        int ocorrencias = 0;
        for (char letra : palavra.toCharArray()) {
            if (letra == letraParaVerificar) {
                ocorrencias++;
            }
        }
        int porcentagem = ocorrencias * 100 / palavra.length();
        saida.println(porcentagem);
    }
}
2 curtidas

Perfeito.Só não entendi ainda muito bem como tu fez mas é questão de eu analisar ponto a ponto.Muito obrigado!

O que você não entendeu?

O que nao tinha entendido era esse laço for pois ainda não tinha visto sendo montado desta forma.Mas já entendi.É sofisticado.

                    for (char letra : palavra.toCharArray()) {
                            if (letra == letraParaVerificar) {
                                   ocorrencias++;
                                                           } }

Esse laço é o mesmo que fazer assim:

char[] letras = palavra.toCharArray();
for (char letra : letras) {
    if (letra == letraParaVerificar) {
        ocorrencias++;
    }
}

Ou assim:

char[] letras = palavra.toCharArray();
for (int i = 0; i < letras.length; i++) {
    char letra = letras[i];
    if (letra == letraParaVerificar) {
        ocorrencias++;
    }
}
1 curtida

Entendi e isso que ainda nao tinha visto.Escrevendo assim fica mais limpo.