[RESOLVIDO] Contando letras na frase java

Boa tarde. Estou com sérios problemas em resolver um exercício em que tenho que o usuário tenha que escrever uma frase e escolher uma letra, e depois retornar quantas vezes a letra aparece na frase.
porém sempre retorna 0;

classe
package acharletraAPP;

public class Frase {

    private String frase;
    private char letra;

    //Acesso
    public String getFrase() {
        return frase;
    }

    public void setFrase(String frase) {
        this.frase = frase;
    }

    public char getLetra() {
        return letra;
    }

    public void setLetra(char letra) {
        this.letra = letra;
    }

    //Métodos
    public int contador() {
        return frase.length();
    }

public int achador() {
    int contador = 0;
    char[] palavra = frase.toCharArray();
    for (int i = 0; i < palavra.length; i++) {
        if (palavra[i] == letra) {
            contador++;
        }
    }
    return contador;
}

}
MAIN

package acharletraAPP;

import javax.swing.JOptionPane;


public class AcharLetra {

     public static void main(String[] args) {
        String frase=JOptionPane.showInputDialog(null, "Digite a frase");
        String letra=String.valueOf("letra");
        letra=JOptionPane.showInputDialog(null, "Digite a letra"); 
         
        Frase localiza = new Frase();
        
        localiza.setFrase(frase);
       // localiza.setLetra(letra);
        
        JOptionPane.showMessageDialog(null, localiza.achador());
        
        
    }
    
}

Faça teste usando equals!

palavra[i].equals(letra)

Apareceu que o char não pode ser desrefenciada

Modifique seu main pra ficar assim:

public static void main(String[] args) {
    String frase= JOptionPane.showInputDialog(null, "Digite a frase");
    char letra = JOptionPane.showInputDialog(null, "Digite a letra").charAt(0);

    Frase localiza = new Frase();

    localiza.setFrase(frase);
    localiza.setLetra(letra);

    JOptionPane.showMessageDialog(null, localiza.achador());
}

O segredo foi mudar o tipo da variável letra pra char e a invocação do método charAt(). Com esse método, nós pegamos apenas o primeiro character digitado pelo usuário, mesmo que ele digite mais de um.

muito obrigado, esse exercício estava me deixando maluco já, vlw mesmo :smiley:

1 curtida