Escreva um programa que lê uma palavra e recupere de volta com os caracteres ímpares em maiúsculo.
Bom dia Sbj, tudo bem?
Pela sua pergunta, parece que você está começando agora no mundo Java, então vou te mostrar uma forma bem simples de se fazer.
Código:
import java.util.Scanner;
public class Exercicio {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String palavra = entrada.next();
int i = 0;
while (palavra.length() > i) {
if (i % 2 == 1) {
System.out.println(palavra.charAt(i));
}
i ++;
}
}
}
Espero que eu tenha te ajudado
Não existem “caracteres ímpares”. Números podem ser pares ou ímpares, mas para caracteres isso não faz sentido.
O que exatamente você quer? São os caracteres que estão em posições ímpares? São os caracteres que representam um dígito cujo valor numérico correspondente é um número ímpar? (eu acho que é a primeira opção, porque se for a segunda, então o requisito de transformar para maiúscula não faria sentido).
É só para imprimir esses caracteres ou é para gerar outra string com os caracteres modificados? Cada uma dessas opções terá uma solução diferente.
Sei que estou parecendo meio chato e pedante, mas o primeiro passo para se programar bem acontece antes de escrever o código: vc precisa definir muito bem o problema. Se for para outras pessoas fazerem então, aí tem que estar mais bem detalhado ainda, sem espaço para ambiguidades.
Tudo bem que nesse caso é um exercício simples e até dá pra adivinhar o que vc quer: muita gente vai dizer que é “óbvio” o que se quer aqui, mas enfim, foi só uma provocação para que vc melhore e evolua. Hoje é um exercício no qual é “óbvio” o que está sendo pedido, amanhã pode ser a especificação de um sistema importante com uma frase ambígua ou não-clara que pode causar prejuízos reais. Uma boa comunicação é parte importante do trabalho em qualquer área, e na nossa não é diferente.
Enfim, se for só para imprimir os caracteres em posições ímpares (convertendo-os para maiúsculo), basta percorrer as posições ímpares:
String palavra = // ler a string, não importa muito como...
for (int i = 1; i < palavra.length(); i += 2) {
System.out.println(Character.toUpperCase(palavra.charAt(i)));
}
Se eu sei que só quero as posições ímpares, posso começar o for
no 1
, e pular de 2 em 2 (i += 2
). Não tem porque fazer de um em um e ir testando i % 2 == 1
(sei que muitos exercícios “exigem” isso, mas sinceramente, se só quer as posições ímpares, não precisa disso).
Dessa forma ele pula as posições pares, mas se quiser imprimir todas (e só as ímpares vc converte para maiúscula), é só trocar para:
for (int i = 0; i < palavra.length(); i++) {
char c = palavra.charAt(i);
if (i % 2 == 0) { // posição par, não modifica o caractere
System.out.println(c);
} else { // posição ímpar, converte para maiúsculo
System.out.println(Character.toUpperCase(c));
}
}
Ou seja, se a posição é par, imprimo o caractere sem modificação. E se for ímpar, converto para maiúscula. Nesse caso sim, precisamos percorrer todas as posições e testar se ela é par ou ímpar.
Lembrando que se a string tiver caracteres que não são letras, toUpperCase
não os altera (afinal, não existe versão maiúscula para @
, %
, 3
, etc).
Agora se a ideia é criar outra string, você poderia usar um StringBuilder
para ir guardando os caracteres e no final gerar a outra:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < palavra.length(); i++) {
char c = palavra.charAt(i);
if (i % 2 == 0) {
sb.append(c);
} else {
sb.append(Character.toUpperCase(c));
}
}
String outra = sb.toString();