Boa tarde pessoal, tudo bem? Preciso fazer um programa que verifique a(s) letra(s) central(is) de uma palavra. Se o número de caracteres for ímpar, ele verifica se a letra central é uma vogal, caso contrário verifica se é um dos dígrafos rr ou ss. O programa deve ser em Java e usar apenas if-else! Iniciei meu código assim porém travei no momento de descobrir o(s) caracter(es) central(is). Alguém poderia me ajudar?
import java.util.Scanner;
public class Alg143 {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Digite qualquer palavra");
String palavra = ler.nextLine();
System.out.println(palavra.length());
double resto = palavra.length() % 2;
if(resto != 0) {
System.out.println("A quantidade de letras da palavra eh impar: " + palavra);
}
else if(resto == 0) {
System.out.println("A quantidade de letras da palavra eh par: " + palavra);
}
}
}
Qual sua dúvida especificamente? Vc está quase lá. Algumas coisas para melhorar e para pensar:
- Sua variável
resto
deve ser int
, não double
. O resultado obtido na sua expressão de divisão será invariavelmente um valor inteiro, visto que length()
retornará um inteiro e você está dividindo o comprimento da String por um inteiro também;
- Seu
else if
que é desnecessário, basta um else
, visto que ou comprimento é divisível por 2 (resto igual a zero) ou não é. Não há outras possibilidades no contexto do seu algoritmo;
- Use o método
chatAt( int posicao )
da classe String
para obter um caractere de uma determinada posição. Por exemplo, palavra.charAt(2)
retorna o caractere na posição 2 da palavra;
- Você precisa calcular a posição dos caracteres do centro;
Pense nisso: se sua palavra tiver 11 caracteres e vc dividir 11 por 2 você obterá 5, que é exatamente o índice do caractere central. Analise: o primeiro caractere está na posição 0, o último na posição 10, sendo assim 5 é a posição do meio. Para a quantidade par, vc pode continuar dividindo por 2, mas você vai precisar de mais uma posição para encontrar o meio. Use o mesmo exemplo acima, agora com 10 caracteres. 10 dividido por 2 resulta em 5, mas 5 é o caractere da “direita” do meio. Qual seria a posição do caractere da esquerda?
Algumas ferramentas importantes e essenciais que hoje em dia os estudantes bizarramente não usam são o caderno, lápis e caneta. Não sei se é o seu caso, mas se você rascunhar no papel o esquema do que você está tentando alcançar, você consegue resolver mais facilmente do que tentar fazer de cabeça.
Eu reescreveria sua solução parcial da seguinte maneira:
import java.util.Scanner;
public class Alg143 {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Digite qualquer palavra");
String palavra = ler.nextLine();
System.out.println(palavra.length());
int resto = palavra.length() % 2;
int meio = palavra.length() / 2;
if( resto == 0 ) {
System.out.println("A quantidade de letras da palavra eh par: " + palavra);
// use o método charAt da classe String para mostrar os dois caracteres centrais
} else {
System.out.println("A quantidade de letras da palavra eh impar: " + palavra);
// use o método charAt da classe String para mostrar o caractere central
}
}
}
Mesmo sua variável resto
não precisaria ser usada, bastando colocar o cálculo no próprio if
, visto que esse valor só será usado para isso. Algo como
if ( palavra.length() % 2 == 0 ) {
...
} else {
...
}
Tente finalizar e avise se deu certo!
Olá David, tudo bem? Obrigado pelo retorno e pelas dicas de melhora do código, sobre descobrir a posição do caracter central quando impar ou os dígrafos centrais serem rr ou ss quando pares, ainda ficou um pouco de dúvida, no caso vc determinou que a palavra tenha 11 caracteres e com isso fica tranquilo de definir a posição através do método palavra.chartAt(5), no caso, posição 5 para saber se o caracter central dessa palavra é vogal ou não, mas e quando eu não sei o tamanho da palavra que o usuário vai digitar? O mesmo acontece para as palavras pares, como proceder?
Você testou o código que passei e tentou entender ele, fazendo um teste de mesa pra acompanhar o valor das variáveis? Se você fizer isso suas dúvidas serão respondidas.