Validação de uma condição usando o while

5 respostas
M

Olá pessoal, sou novo no fórum e iniciante no java não soube onde postar a pergunta, por isso abrir um novo tópico, caso exista um local específico para a pergunta favor me informar. Estou c/ a seguinte dúvida:

  • não consigo validar uma informação comparando STRINGS, utilizando o WHILE.
  • consigo validar quando é usado um char na comparação.
  • o que eu quero é que quando o usuário digite algo que seja diferente de SIM e NÃO, apareça a mensagem (resposta inválida. digite a resposta novamente. resposta - SIM / NÃO) e só passe para a próxima linha assim que ele digitar a resposta certa, como está ocorrendo com o SEXO.
    -tentei utilizar o sinal de diferença (!=) como no SEXO, e também o EQUALS, mas nenhum dos dois comandos conseguiu me retornar a informação (resposta inválida. digite a resposta novamente. resposta - SIM / NÃO), quando o usuário digita a resposta errada. Se puderem me ajudar agradeço.

O trecho do código segue abaixo:

for (i = 0; i <= 1; i++)

{

for (j = 0; j <= 1; j++)

{

sexo[i][j] = JOptionPane.showInputDialog(sexo - F / M).charAt(0);
while ((sexo[i][j] != 'f') && (sexo[i][j] != 'm'))    //validação usando variáveis CHAR
                  {
                    sexo[i][j] = JOptionPane.showInputDialog("sexo inválido. digite novamente o sexo - F / M").charAt(0);
                  }

            resposta[i][j] = JOptionPane.showInputDialog("você gostou do novo produto? - SIM / NÃO");

         //while ((resposta[i][j] != "sim") && (resposta[i][j] != "nao")) ===> 1º MÉTODO USADO

        // while ((resposta[i][j].equals("sim")) && (resposta[i][j].equals("nao"))) 2º MÉTODO USADO
                  {
                    resposta[i][j] = JOptionPane.showInputDialog("resposta inválida. digite a resposta novamente. resposta - SIM / NÃO");
                  }

}
}

5 Respostas

ArchV

Olá. Na próxima visita ao guj, se precisar utilizar trechos de código fonte, utilize as tag [ code]

Então, se você precisa fazer o teste se o usuário entrou uma opção válida use a estrutura Do…While , pois esta verifica no final (ou seja, apos o usuário inseriu o valor). Já o While verifica no início e neste caso não é isso que você procura.

for (i = 0; i <= 1; i++)
{
  for (j = 0; j <= 1; j++)
  {
  // pressupondo que sexo é um array do tipo String.
    do
    {
    sexo[i][j] = JOptionPane.showInputDialog("sexo - F / M").substring(0,1);
    }while(!sexo[i][j].equals("f") || ... testa "F","m" e "M");

  } // fim do primeiro for mais interno.
}
M

Olá amigo obrigado pela atenção, mas a parte que vc explicou tá sem problemas eu só citei p/ exemplificar. O que eu quero corrigir é a segunda parte onde tem a variável RESPOSTA[I][J] que tá no trecho logo abaixo do que vc explicou, que é a seguinte:

resposta[i][j] = JOptionPane.showInputDialog(“você gostou do novo produto? - SIM / NÃO”);

//while ((resposta[i][j] != “sim”) && (resposta[i][j] != “nao”)) ===> 1º MÉTODO USADO

// while ((resposta[i][j].equals(sim)) && (resposta[i][j].equals(nao))) ===> 2º MÉTODO USADO

{

resposta[i][j] = JOptionPane.showInputDialog(resposta inválida. digite a resposta novamente. resposta - SIM / NÃO);

É neste trecho que eu não consigo validar, caso a resposta do usuário seja diferente de SIM ou NÃO. Pois se for diferente é p/ dar a seguinte informação (resposta inválida. digite a resposta novamente. resposta - SIM / NÃO), ou seja solicitará a resposta novamente e só sairá desse laço (while), quando o usuário digitar a resposta certa (SIM ou NÃO).

Ah e quanto e quanto usar as tags code se puder me dizer como é agradeço. E mais uma vez obrigado!

L

mazinhotavares:
Olá pessoal, sou novo no fórum e iniciante no java não soube onde postar a pergunta, por isso abrir um novo tópico, caso exista um local específico para a pergunta favor me informar. Estou c/ a seguinte dúvida:

  • não consigo validar uma informação comparando STRINGS, utilizando o WHILE.
  • consigo validar quando é usado um char na comparação.
  • o que eu quero é que quando o usuário digite algo que seja diferente de SIM e NÃO, apareça a mensagem (resposta inválida. digite a resposta novamente. resposta - SIM / NÃO) e só passe para a próxima linha assim que ele digitar a resposta certa, como está ocorrendo com o SEXO.
    -tentei utilizar o sinal de diferença (!=) como no SEXO, e também o EQUALS, mas nenhum dos dois comandos conseguiu me retornar a informação (resposta inválida. digite a resposta novamente. resposta - SIM / NÃO), quando o usuário digita a resposta errada. Se puderem me ajudar agradeço.

O trecho do código segue abaixo:

for (i = 0; i <= 1; i++)

{

for (j = 0; j <= 1; j++)

{

sexo[i][j] = JOptionPane.showInputDialog(sexo - F / M).charAt(0);
while ((sexo[i][j] != 'f') && (sexo[i][j] != 'm'))    //validação usando variáveis CHAR
                  {
                    sexo[i][j] = JOptionPane.showInputDialog("sexo inválido. digite novamente o sexo - F / M").charAt(0);
                  }

            resposta[i][j] = JOptionPane.showInputDialog("você gostou do novo produto? - SIM / NÃO");

         //while ((resposta[i][j] != "sim") && (resposta[i][j] != "nao")) ===> 1º MÉTODO USADO

        // while ((resposta[i][j].equals("sim")) && (resposta[i][j].equals("nao"))) 2º MÉTODO USADO
                  {
                    resposta[i][j] = JOptionPane.showInputDialog("resposta inválida. digite a resposta novamente. resposta - SIM / NÃO");
                  }

}
}

Pra comprar Strings vc sempre precisa usar o equals.

No segundo jeito que vc fez, nunca vai dar true pq vc esqueceu de colocar o !(negação) antes das comparações então ficou: Enquanto resposta for igual a SIM e resposta for igual a NAO, o que é impossível de acontecer, então nunca vai entrar no while. Muda para:

while ((!resposta[i][j].equals("sim")) && (!resposta[i][j].equals("nao")))

Ou seja, se resposta não for igual a SIM e resposta não for igual a NAO dá true e entra no while.

Espero ter ajudado!

ViniGodoy

Oi, como o ArchV falou, por favor, use as tags code para postar códigos:

Seu código aqui

Note que tem um botão chamado “code” logo abaixo do título. Você também pode selecionar todo seu código e pressiona-lo, para que as tags sejam automaticamente adicionadas.

M

Olá amigos, muito obrigado pela ajuda agora funcionou, realmente faltava o ponto de exclamação (!) , que é a negação como o IAVH falou. E quanto aos tags code, irei seguir a orientação do VINIGODOY, quando for postar algo. Desculpa se o post ficou fora do padrão, é pq eu não tinha o conhecimento de como postar. E mais uma vez obrigado pela força!!!

Criado 16 de fevereiro de 2010
Ultima resposta 17 de fev. de 2010
Respostas 5
Participantes 4