Olá pessoal, estou com uma questão para resolver que diz o seguinte :
Construa um programa que substitua todas as letras de uma dada frase por maiúsculas e minúsculas, alternadamente.
Ex: EsTe É uM eXeMpLo De CoMo DeVeRá FiCaR a FrAsE dIgItAdA. NoTe QuE oS eSpAçOs Em BrAnCo DeVeM sEr IgNoRaDoS.
Não estou conseguindo realizar a alternação entre caracteres para deixar uma maiúscula e a sucessora minuscula, entretanto consigo deixar a primeira letra de qualquer frase fornecida pelo usuário maiuscula:
=========================================================================================================================================
public static void main(String[] args) {
Scanner palavra = new Scanner(System.in);
String frase = palavra.nextLine();
System.out.println(frase.substring(0,1).toUpperCase() + frase.substring(1) );
}
}
=========================================================================================================================================
Atc, Felipe
Veja se isto te ajuda:
[code]public class Main {
private static final char ESPACO = ' ';
public static void main(String[] args) {
String texto = "EsTe É uM eXeMpLo De CoMo DeVeRá FiCaR a FrAsE dIgItAdA. NoTe QuE oS eSpAçOs Em BrAnCo DeVeM sEr IgNoRaDoS.";
StringBuilder novoTexto = new StringBuilder();
boolean textoComecaComMaiuscula = Character.isUpperCase(texto.charAt(0));
for (int i=0; i < texto.length(); i++) {
Character c = texto.charAt(i);
if(c.charValue() == ESPACO) {
novoTexto.append(c);
textoComecaComMaiuscula = alternarMaiusculoMinusculo(textoComecaComMaiuscula);
continue;
}
if(textoComecaComMaiuscula) {
if(isNumeroPar(i))
novoTexto.append(toLowerCase(c));
else
novoTexto.append(toUpperCase(c));
} else {
if(isNumeroPar(i))
novoTexto.append(toUpperCase(c));
else
novoTexto.append(toLowerCase(c));
}
}
System.out.println(novoTexto);
}
private static String toUpperCase(Character c) {
return c.toString().toUpperCase();
}
private static String toLowerCase(Character c) {
return c.toString().toLowerCase();
}
private static boolean alternarMaiusculoMinusculo(boolean textoComecaComMaiuscula) {
return textoComecaComMaiuscula? false : true;
}
private static boolean isNumeroPar(int i) {
return i%2 == 0;
}
}
[/code]
Que tal um exemplo um pouco mais compacto? :)[code]public class Miguxeitor{
public static void main(String[] args) {
String str = "este é um exemplo de como deverá ficar a frase digitada. note que os espaços em branco devem ser ignorados";
System.out.println(miguxate(str));
}
public static String miguxate(String str){
str = str.toLowerCase();
StringBuilder builder = new StringBuilder();
boolean upperCase = false;
for (char c : str.toCharArray()){
if (Character.isLetter(c)){
builder.append(upperCase ? c : (char)(c - 32));
upperCase = !upperCase;
} else{
builder.append(c);
}
}
return builder.toString();
}
}
[/code]
Creio que o melhor algoritmo para fazer isso se encontra aqui:
http://stackoverflow.com/questions/3292952/uppercase-random-number-of-characters-from-a-random-alphanumeric-string
Utilizando distribuicao binomial para a probabilidade aleatoria.
Esta tudo explicado no post de Eyal Schneider.
[quote=andrielc]Creio que o melhor algoritmo para fazer isso se encontra aqui:
http://stackoverflow.com/questions/3292952/uppercase-random-number-of-characters-from-a-random-alphanumeric-string
Utilizando distribuicao binomial para a probabilidade aleatoria.
Esta tudo explicado no post de Eyal Schneider.[/quote]
Mas probabilidade aleatória não se aplica aqui. A regra dele é fixa. se a letra atual é maiúscula a próxima letra invariavelmente não pode ser.
Muito bom o seu código, Rodrigo. Só não entendi o nome da classe… hauhauhau…
Hahahaha, é que ele me lembrou disso aqui: http://www.coisinha.com.br/miguxeitor/