Galera, estou com uma dúvida sobre um exercício que eu tenho que fazer, a dúvida é a seguite.
Tenho um método confirmar() que foi chamado por outro método, nele eu digito “s” pra sim ou “n” pra não, caso eu digite “s” eu quero que retorne true, caso eu digite “n” eu quero que retorne false, mas aparentemente não está retornando nada…eu fiz um teste retornando true independente se eu digitar “s” ou “n” e vai normal…gostaria de saber qual o problema, vou mandar o método pra ficar mais facil a visualização.
Outra pergunta, tem como eu passar o que foi digitado pra minúsculo ?? Eu sei que no caso de String eu posso usar o toLowerCase(), mas e no caso de char ???
Oi, veja se isso te ajuda.
Tem o Character.toUpperCase(), Character.isUpperCase() e por ai adiante. Veja a classe Character.
Eu coloquei o != ‘s’ porque se forem == você está dizendo que enquanto o usuário digitar ‘s’ ou ‘n’ ele permanece no loop, era isso mesmo?
Tente como fiz ali.
eu coloquei aqui tudo certinho, mas não está saindo do looping…se eu colocar o == ele sai mas chama o método errado, isso se eu usar o if, se eu usar o == e tirar o if vai certo mas quando eu digitar “n” não é pro método que chamou continuar…
Não, manda o seu código JAVA com as alterações.
Recomendo que use o System.out.println() e imprima o valor digitado do char, para ver se está efetuando a leitura corretamente.
Veja qual será o valor apresentado no console. Obviamente, a diferença é que um vai sair como foi digitado e o outro, com o mesmo valor mas em minusculo.
Analisando bem o teu while, pude verificar o seguinte:
Como você está utilizando o operando || (ou) sempre que UM ou OUTRO ou AMBOS vier a ser verdade, o laço continuará.
Como você lê um char, que é apenas um, a condição do while jamais é satisfeita.
Por quê?
Simples:
Case ‘s’:
primeira parte do while é verdadeira, pode seguir.
segunda parte do while é falsa, continua no laço.
break;
Case ‘n’:
primeira parte do while é falsa, continua no laço.
nem verifica a segunda.
break;
Isso tanto para
...
while((aux != 's') || (aux != 'n'));
quanto para
...
while((aux == 's') || (aux == 'n'));
O que apenas inverteria a ordem, mas a lógica seria a mesma.
Sendo assim, o uso de || se torna incorreto para a solução desejada.
É preciso trocar por um operando cuja tabela verdade seja verdadeira para ambas as expressões.
Como estamos trabalhando com while, consideramos que o laço será repetido enquanto a condição aux != ‘s’ for verdadeira (ou seja, aux seja diferente de ‘s’ e, ao mesmo tempo, aux != ‘n’, portanto, aux diferente de ‘n’.
Somente o operador lógico AND, representado no java por && possui tal característica.
Para ilustrar:
Analisando bem o teu while, pude verificar o seguinte:
Como você está utilizando o operando || (ou) sempre que UM ou OUTRO ou AMBOS vier a ser verdade, o laço continuará.
Como você lê um char, que é apenas um, a condição do while jamais é satisfeita.
Por quê?
Simples:
Case ‘s’:
primeira parte do while é verdadeira, pode seguir.
segunda parte do while é falsa, continua no laço.
break;
Case ‘n’:
primeira parte do while é falsa, continua no laço.
nem verifica a segunda.
break;
Isso tanto para
...
while((aux != 's') || (aux != 'n'));
quanto para
...
while((aux == 's') || (aux == 'n'));
O que apenas inverteria a ordem, mas a lógica seria a mesma.
Sendo assim, o uso de || se torna incorreto para a solução desejada.
É preciso trocar por um operando cuja tabela verdade seja verdadeira para ambas as expressões.
Como estamos trabalhando com while, consideramos que o laço será repetido enquanto a condição aux != ‘s’ for verdadeira (ou seja, aux seja diferente de ‘s’ e, ao mesmo tempo, aux != ‘n’, portanto, aux diferente de ‘n’.
Somente o operador lógico AND, representado no java por && possui tal característica.
Para ilustrar:
O1 O2 Saída
V V V
F V F
V F F
F F F
O que quer dizer que somente
while (aux != 's' && aux != 'n');
e Jesus salvam.[/quote]
Perfeita a explicação. Eu não me atentei ao caso do || e a tabela verdade.