Do...while [Resolvido]

9 respostas
rafa.spimenta

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.

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") );

se for necessario eu mando o restante do codigo

9 Respostas

sergiotaborda
  1. Vc não quer comparar strings com =! use equals()
    2)Não é “sexo” é “genero”. Escolher o “genero” do cliente.
rafa.spimenta

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.spimenta

??

thundercas

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.

rafa.spimenta

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:

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") ) );
rafa.spimenta

Alguem pode me ajudar?

jpfguambe

Mesmo sem conhecer detalhes sobre as variáveis usadas :shock: ,
acho que o código seguinte funcionará:

  1. do
  2. {
    
  3. System.out.print("Selecione qual o sexo do cliente: \n(1)-Masculino. \n(2)Feminino. ");
    
  4. theCliente[x] = input.nextLine();
    
  5. //setCliente( theCliente );    -->Não actualize o cliente ainda
    
  6. if ( theCliente[x] .equals("1") ){  //if ( getcliente()[x].equals("1") )  -->use a variável  theCliente[x] em vez de getcliente()[x]
    
  7. theCliente[x] = "Masculino";
    
  8. setCliente(theCliente);
    
  9. }
    
  10. else
    
  11. if ( theCliente[x] .equals("2") ){ // if (getcliente()[x].equals("2") )  -->use a variável  theCliente[x] em vez de getcliente()[x]
    
  12. theCliente[x] = "Feminino";
    
  13. setCliente(theCliente);
    
  14. }
    
  15. else
    
  16. System.out.print("Opção Invalida.");
    
  17. }while( ( !getcliente()[x].equals("Masculino") ) || ( !getcliente()[x].equals("Feminino") ) );
    
rafa.spimenta

parceiro, fiz conforme voce sitou acima, e esta dando o mesmo erro de logica!

vo te mandar classe desses metodos:

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();
	}
}
rafa.spimenta

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") ) );

Criado 6 de abril de 2008
Ultima resposta 6 de abr. de 2008
Respostas 9
Participantes 4