Iniciante Java - Código não roda como gostaria. Me ajudem pfv

Criei um código em java no qual a ideia básica dele é de que vc vai escolher uma palavra e uma letra e o código te dirá quantas dessa letra terá na palavra. Ex: (abacaxi, a) o programa deveria retornar 3. Porém por algum motivo o programa está retornando o número de letras na palavra inteira, sem distinguir entre o A e o resto. Se puderem me ajudar…
O código está abaixo:

function contaLetras(string, letra) {
	let palavra = string;
	let tamanhoP = palavra.length;
	let contador = 0;
	for (i = 0; i < tamanhoP; i++) {
		if (letra = palavra[i]) {
			contador = contador + 1;
		}
	}
	return contador
}
contaLetras("abacaxi","a");

Esse código aí não é Java.
É Javascript.
São linguagens diferentes.

Isso aí não é uma comparação, é uma atribuição.
Para comparar, utilize == ou ===.

1 curtida

Uma dica, evite utilizar palavras reservadas(string) como nome de variável. Embora o Javascript permita isso em alguns casos, não é uma boa prática e você certamente irá se confudir ao migrar para uma linguagem fortemente tipada(ex.: Typescript, Java, C# e etc.)

string (com “s” minúsculo) não é uma palavra reservada do JavaScript (veja aqui a lista completa).

O que daria problema é ter uma variável chamada String (com “S” maiúsculo), já que este é um dos tipos nativos da linguagem.


Obs: em TypeScript, string é um tipo. Em Java não, então uma variável chamada string não dá problema nenhum. Mas de forma geral, concordo que em alguns casos pode ficar confuso mesmo. Só que o meu argumento principal para mudar o nome é escolher algo que seja mais claro. Uma string pode ter qualquer coisa (não necessariamente um texto que faz sentido, pode ter qualquer caractere), então o parâmetro poderia se chamar texto ou palavra, por exemplo, deixando mais claro o que a função espera (claro que aí depende do contexto pra escolher um nome mais adequado).

Complementando o que já foi dito acima (usar == ou === em vez de =), para que esse monte de variáveis redundantes e desnecessárias? Poderia ser assim:

function contaLetras(palavra, letra) {
    let contador = 0;
    for (let i = 0; i < palavra.length; i++) {
        if (letra === palavra[i]) {
            contador++;
        }
    }
    return contador;
}

Ou ainda, usando o for..of:

function contaLetras(palavra, letra) {
    let contador = 0;
    for (const caractere of palavra) {
        if (letra === caractere) {
            contador++;
        }
    }
    return contador;
}