Oi!
Eu e o Eric estamos tendo problemas para fazer a primeira letra dos versos impares ficarem maiusculas. Alguma sugestão?
Olá, Vinícius!
Além do método toUpperCase, visto em sala de aula (que funciona para qualquer String, porém converte TODOS os caracteres para maiúsculas), pode te ajudar
o método substring. Dê uma olhada em
http://java.sun.com/javase/6/docs/api/
selecione a classe String no menu que fica embaixo à esquerda e olhe na tabela com os métodos.
Além do método toUpperCase, visto em sala de aula (que funciona para qualquer String, porém converte TODOS os caracteres para maiúsculas), pode te ajudar
o método substring. Dê uma olhada em
http://java.sun.com/javase/6/docs/api/
selecione a classe String no menu que fica embaixo à esquerda e olhe na tabela com os métodos.
Muito obrigado professor, tenho certeza de que isso ajudará - e muito!! =D
Esse método substring sugerido não aparece no livro, certo?
Como poderia usar o toUpperCase para converter apenas a primeira letra?
Olá, Danila!
Se você quiser fazer o EP usando apenas os métodos do livro, não se preocupe que dá pra fazer tudo. O que estamos colocando a mais como dicas no fórum é de uso estritamente opcional. De fato a classe String possui vários métodos que ajudam a gente a escrever códigos mais concisos e não se preocupar com coisas tediosas (embora importantes!), como construir Strings letra-por-letra.
Sobre sua 2a pergunta, se s="abacaxi", então s.toUpperCase().charAt(0) é o caractere 'A'. A partir dele você pode construir a string "Abacaxi" somando (isto é, concatenando) os demais caracteres, um de cada vez:
String t=""; // inicializa String vazia
t = t+s.toUpperCase().charAt(0); // adiciona primeira letra em maiúscula
for (i=1;i<s.length();i=i+1) // adiciona as demais letras
Se você quiser fazer o EP usando apenas os métodos do livro, não se preocupe que dá pra fazer tudo. O que estamos colocando a mais como dicas no fórum é de uso estritamente opcional. De fato a classe String possui vários métodos que ajudam a gente a escrever códigos mais concisos e não se preocupar com coisas tediosas (embora importantes!), como construir Strings letra-por-letra.
Sobre sua 2a pergunta, se s="abacaxi", então s.toUpperCase().charAt(0) é o caractere 'A'. A partir dele você pode construir a string "Abacaxi" somando (isto é, concatenando) os demais caracteres, um de cada vez:
String t=""; // inicializa String vazia
t = t+s.toUpperCase().charAt(0); // adiciona primeira letra em maiúscula
for (i=1;i<s.length();i=i+1) // adiciona as demais letras
t = t+s.charAt(i);
Eu realmente sinto mais segurança em usar os métodos do livro. Puxa, fiquei contente com a resposta pois conseguir fazer parecido apenas consultando o livro, porém não tinha usado esse for. Eu tentei fazer uma string receber a soma de duas chars; para mim, isso tinha lógica, mas não compilou. Gostaria que o professor comentasse. Obrigada!
Legal, Danila!
O que te impediu de atribuir a soma de dois char's a uma String é um detalhe que realmente não foi abordado no curso, e tem a ver com como o operador '+' é interpretado. Vimos que o '+' é usado para somar int's, double's, Strings e etc., mas é interessante se perguntar como a linguagem sabe que aqui trata-se de uma soma no sentido matemático, alí uma concatenação de seqüências de caracteres, etc?
Isso tem a ver com o contexto onde o operador aparece. Se a soma envolve int's e/ou double's, é soma aritmética; se são Strings, ou ainda um String e um char, é concatenação. E se são dois char's? A linguagem considera que sua intenção neste caso é somar os códigos numéricos (ASCII ou parecido) que representam estes caracteres (eu sei, você não sabia, nem tem culpa disso...). Isso é útil para fazer certas manipulações, como por exemplo converter uma letra para maiúscula! O método toUpperCase não faz a conversão de cada caractere através de alguma construção medonha parecida com se (c=='a') então 'A' senão se (c=='b') ... mas sim através de uma conta bem simples como:
c_maiusculo = (char)(c+'A'-'a');
a expressão c+'A'-'a' soma à posição do caractere armazenado em c a diferença entre o valor da posição do caractere 'A' e do caractere 'a'; sabendo que as letras minúsculas e maiúsculas estão armazenadas na seqüência "natural" 'a','b','c'... e 'A','B','C',... isso fornece a posição da versão maiúscula do caratere armazenado em c. Só que o resultado é um número. Para mudar de volta pra char tem que usar este operador (char) que é uma conversão explícita entre tipos (neste caso de int para char). Você também pode somar números a char's e obter números: por exemplo, 'f'+5 é a posição (na tabela de caracteres) que fica 5 casas à frente da posição ocupada por 'f'. A expressão (char)('f'+5) é o caractere que fica 5 casas depois de 'f', ou seja, 'k'.
Vá na janela de interactions do DrJava e digite a seqüência:
char c='f'
c+1
c+5
(char)(c+1)
(char)(c+5)
for (c='z'; c>='a'; c=(char)(c-1))
Talvez o exemplo torne o blá-blá-blá mais claro!
Bom final de semana!
Marcelo
O que te impediu de atribuir a soma de dois char's a uma String é um detalhe que realmente não foi abordado no curso, e tem a ver com como o operador '+' é interpretado. Vimos que o '+' é usado para somar int's, double's, Strings e etc., mas é interessante se perguntar como a linguagem sabe que aqui trata-se de uma soma no sentido matemático, alí uma concatenação de seqüências de caracteres, etc?
Isso tem a ver com o contexto onde o operador aparece. Se a soma envolve int's e/ou double's, é soma aritmética; se são Strings, ou ainda um String e um char, é concatenação. E se são dois char's? A linguagem considera que sua intenção neste caso é somar os códigos numéricos (ASCII ou parecido) que representam estes caracteres (eu sei, você não sabia, nem tem culpa disso...). Isso é útil para fazer certas manipulações, como por exemplo converter uma letra para maiúscula! O método toUpperCase não faz a conversão de cada caractere através de alguma construção medonha parecida com se (c=='a') então 'A' senão se (c=='b') ... mas sim através de uma conta bem simples como:
c_maiusculo = (char)(c+'A'-'a');
a expressão c+'A'-'a' soma à posição do caractere armazenado em c a diferença entre o valor da posição do caractere 'A' e do caractere 'a'; sabendo que as letras minúsculas e maiúsculas estão armazenadas na seqüência "natural" 'a','b','c'... e 'A','B','C',... isso fornece a posição da versão maiúscula do caratere armazenado em c. Só que o resultado é um número. Para mudar de volta pra char tem que usar este operador (char) que é uma conversão explícita entre tipos (neste caso de int para char). Você também pode somar números a char's e obter números: por exemplo, 'f'+5 é a posição (na tabela de caracteres) que fica 5 casas à frente da posição ocupada por 'f'. A expressão (char)('f'+5) é o caractere que fica 5 casas depois de 'f', ou seja, 'k'.
Vá na janela de interactions do DrJava e digite a seqüência:
char c='f'
c+1
c+5
(char)(c+1)
(char)(c+5)
for (c='z'; c>='a'; c=(char)(c-1))
System.out.println(c);
Talvez o exemplo torne o blá-blá-blá mais claro!
Bom final de semana!
Marcelo
Acho que essas poucas (!) linhas de expressão esclareceram bem o que acontece e pela clareza poderiam, ao meu ver, serem incorporadas ao texto do livro. Obrigada!
Não consegui entender a maneira de converter pra maiúscula. Se puder ajudar, agradeço...
Eduardo