Nas instruções abaixo (que fazem parte de um metodo que cadastra dados de um cliente em um array ) eu peço para o cliente escolher qual seu sexo.
Eu estou usando um do…while com if…else dentro.
No entando esta dando erro na linha 19.
Sendo assim nem pude testar a logica ainda para ver se vai dar certo.
[code]do
{
System.out.print("Selecione qual o sexo do cliente: \n(1)-Masculino. \n(2)Feminino. ");
theCliente[x] = input.nextLine();
setCliente( theCliente );
if ( getcliente()[x].equals("1") )
setCliente(theCliente);
else
if (getcliente()[x].equals("2") )
setCliente(theCliente);
else
System.out.print("Opção Invalida.");
}while((getcliente()[x] =! "1") || (getcliente()[x] =! "2") );[/code]
se for necessario eu mando o restante do codigo
Se eu mudar para equals meu programa vai ficar repetindo o “do” enquando eu nao digitar 1 ou 2… certo?
no entando o que eu quero eh que meu programa fique repetindo o “do” enquando eu NAO digitar ’ 1’ ou ‘2’ que são as opcoes validas (masculino é 1 e feminino é 2)
Ou seja, acho que o equals logicamentes nao daria certo?
2-Desculpa! ja mudei aqui valeu pelo toque (genero do cliente e nao sexo do cliente)
rafa-projeseg… O que nosso colega sergiotaborda quis dizer, é que você deve utilizar sempre o equals/equalsIgnoreCase para comparar Strings…
Se você quer comparar, mas validando quando for false, utilize o exclamação “!” à frente da comparação realizada.
Coloquei o “equals” e com “!” na frente da comparação.
No entando o erro que esta dando agora é de logica.
Quando eu entro com 1 ou 2 o meu programa entra num loop infinito. (sempre pede p eu informar o gênero do cliente).
Não estou conseguindo sair do loop…
Segue codigo abaixo:
[code]do
{
System.out.print("Selecione qual o gênero do cliente: \nDigite (1) para Masculino. \nDigite (2) para Feminino. \nDigete O numero correspondente: ");
theCliente[x] = input.nextLine();
setCliente( theCliente );
if ( getcliente()[x].equals("1") )
{
theCliente[x] = "Masculino";
setCliente(theCliente);
}
else
if (getcliente()[x].equals("2") )
{
theCliente[x] = "Feminino";
setCliente(theCliente);
}
else
System.out.print("Opção Invalida.\n\n");
}
while
( ( !getcliente()[x].equals(“Masculino”) ) || ( !getcliente()[x].equals(“Feminino”) ) );[/code]
Mesmo sem conhecer detalhes sobre as variáveis usadas :shock: ,
acho que o código seguinte funcionará:
- do
-
{
-
System.out.print("Selecione qual o sexo do cliente: \n(1)-Masculino. \n(2)Feminino. ");
-
theCliente[x] = input.nextLine();
-
//setCliente( theCliente ); -->Não actualize o cliente ainda
-
-
if ( theCliente[x] .equals("1") ){ //if ( getcliente()[x].equals("1") ) -->use a variável theCliente[x] em vez de getcliente()[x]
-
theCliente[x] = "Masculino";
-
setCliente(theCliente);
-
}
-
else
-
if ( theCliente[x] .equals("2") ){ // if (getcliente()[x].equals("2") ) -->use a variável theCliente[x] em vez de getcliente()[x]
-
theCliente[x] = "Feminino";
-
setCliente(theCliente);
-
}
-
else
-
System.out.print("Opção Invalida.");
-
-
}while( ( !getcliente()[x].equals("Masculino") ) || ( !getcliente()[x].equals("Feminino") ) );
parceiro, fiz conforme voce sitou acima, e esta dando o mesmo erro de logica!
vo te mandar classe desses metodos:
[code]import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class classCliente extends classVendedor
{
private String[] cliente = new String[4];//variaveis
String op;
Scanner input = new Scanner(System.in);
public void setCliente( String[] cliente1)//metodo set e get cliente
{
cliente = cliente1;
}
public String[] getcliente()
{
return cliente;
}//fim cliente
public void cadastraDadosCliente()//metodo armazena nome cliente
{
int x = 0;
String[] theCliente = new String[4];
System.out.print("-->Informações cadastrais do Cliente.\n");
System.out.printf("%s, por favor digite o nome do cliente: ", getVendedor());
theCliente[x] = input.nextLine();
setCliente( theCliente );
x++;
System.out.print("Digite o número do CPF do cliente: ");
theCliente[x] = input.nextLine();
setCliente( theCliente );
x++;
System.out.print("Digite o nome da cidade: ");
theCliente[x] = input.nextLine();
setCliente( theCliente );
x++;
do
{
System.out.print("Selecione qual o sexo do cliente: \n(1)-Masculino. \n(2)Feminino. ");
theCliente[x] = input.nextLine();
if ( theCliente[x] .equals("1") ) //if ( getcliente()[x].equals("1") ) -->use a variável theCliente[x] em vez de getcliente()[x]
{
theCliente[x] = "Masculino";
setCliente(theCliente);
}
else
if ( theCliente[x] .equals("2") ) // if (getcliente()[x].equals("2") ) -->use a variável theCliente[x] em vez de getcliente()[x]
{
theCliente[x] = "Feminino";
setCliente(theCliente);
}
else
System.out.print("Opção Invalida.");
}
while( ( !getcliente()[x].equals("Masculino") ) || ( !getcliente()[x].equals("Feminino") ) );
}
public void chamaCadastroCliente()//metodo chama os dados do cliente e exibe na tela
{
cadastraDadosCliente();
for(int y=0; y<4; y++)
{
System.out.printf("%s\n",getcliente()[y]);
}
System.out.print("Os dados cadastrais estão OK? (S/N)");
op = input.nextLine();
if(op.equalsIgnoreCase("s") )
{
classTabela metTabela = new classTabela();
metTabela.tabelaVeiculos();
}
else
chamaCadastroCliente();
}
}[/code]
Muito obrigado a todos pela ajuda!
resolvido!
jpfguambe a solução foi trocas o “||” por “&&” no “while”
segue:
while( ( !getcliente()[x].equals("Masculino") ) && ( !getcliente()[x].equals("Feminino") ) );