Porcentagem de determinada letras em uma palavra

8 respostas Resolvido
java
J

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

8 Respostas

J

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

J

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
S
Solucao aceita
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);
    }
}
J

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

S

O que você não entendeu?

J

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++;
                                                           } }
S

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++;
    }
}
J

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

Criado 22 de maio de 2019
Ultima resposta 23 de mai. de 2019
Respostas 8
Participantes 3