Por que fica em loop?

11 respostas
loopjava
L
System.out.println("\nSelecione uma categoria de pagamento abaixo:\n\n1-Km Livre\n2-Preço por Km");
                    System.out.print("\nDigite a opção: ");
                    int tipo = Ler.nextInt();
                    Ler.nextLine();
             
            
                    System.out.println("tipo: " +tipo); //conferindo valor da variável
                        
                        while(tipo!=1 || tipo!=2){
                            System.out.print("Opção inválida! Digite novamente:");
                            tipo = Ler.nextInt();
                            Ler.nextLine();
                        }

Log:
Selecione uma categoria de pagamento abaixo:

1-Km Livre
2-Preço por Km

Digite a opção: 1
tipo: 1
Opção inválida! Digite novamente:


Não era pra entrar no while, por que tá entrando?
Obrigado.

11 Respostas

P

vejamos

tipo != || tipo != 2

substitui o valor

1 != 1 || 1 != 2

1 é diferente de 1 ? false
1 é diferente de 2 ? true

false || true é true pela tabela verdade do OR

o que vc quer é usar AND

tipo != 1 && tipo != 2

L

Que descuido meu, muito obrigado. Deu certo agora

L

Tenho mais um problema parecido:

System.out.print("Digite a placa do carro: ");
                    String nomePlaca=Ler.nextLine();
                    for (int l=0 ; l<listaDeCarros.size() ; l++){
                       int r=0; while(r==0){
                            if(listaDeCarros.get(l).getPlaca().equals(nomePlaca)){
                            r=1;
                                carro.add(listaDeCarros.get(l));
                                
                            }
                            else { 
                                System.out.print("Placa Inválida! - Digite novamente: ");
                                nomePlaca=Ler.nextLine(); 
                            } //final else plca 
                        } //final while placa 
                    } //final for lista de carros

Log:
Digite o CPF do cliente: [telefone removido]
Numero de carros que serão adicionados: 1

Digite a placa do carro: AAA-1111
Placa Inválida! - Digite novamente:

Esta placa está cadastrada, e quando digito a placa ele cai no if e adiciona, o problema é que ele está lendo o else também.

Eu implementei essa parte de conferência de dados (se o dado tá errado, digitar novamente) depois. Aplaca existe, o carro é adicionado, etc; Tudo OK, Porém não estou entendendo porque tá caindo no else também.

P

pra que vc enfia esse while dentro do for?

L

Único jeito que sei para fazer repetição.

Enquanto o usuário digitar informação errada vai repetir o código.

Vai cair dentro do while, aí no IF verifica se o nome da placa digitada é igual a placa que está cadastrada. Se estiver cadastrada R passa a valer 1 e quebra o ciclo While. Se a placa estiver errada vai ficar repetindo até a placa existir.

P

vamos la

o seu laço while é pra controlar uma coisa ( o fato da placa ser encontrada ou não, e vc toma uma decisão )

o leu laço for é o seu laço de busca. perceba que se vc refatorar pra

boolean encontrada = false; 
while ( ! encontrada ){
   // digite placa carro
   // le placa carro
  Carro c = this.procuraCarroPelaPlaca( placa );
  if ( c != null) {
      // ACHEI
      encontrada = true;
  } else {
     // mensagem "digite novamente"
  }
}

o metodo procuraCarroPelaPlaca vai fazer o que? um laço for em toda a listaDeCarros

a questão é vc organizar as coisas.

L

Hum, acho que entendi, mas enquanto ao comando:

(listaDeCarros.get(l).getPlaca().equals(nomePlaca)){
carro.add(listaDeCarros.get(l));
}

Você criou um objeto carro por quê ?
Carro c = this.procuraCarroPelaPlaca( placa );

P

eu não criei. eu procurei por ele. eu apenas separei a interação de perguntar a placa da interação procurar o carro que tem esta placa.

L

Hum, então eu faria ?

Carro C = (listaDeCarros.get(l).getPlaca().equals(nomePlaca)){
carro.add(listaDeCarros.get(l));
}
P

acho que confundi vc.

vc tem 2 iterações:

  1. pedir pela placa
  2. com essa placa, vc procura o carro

coloca o laço while fora do for. o for nesse caso serve pra procurar o carro.

L

Entendi agora, valeu.

Criado 28 de novembro de 2016
Ultima resposta 28 de nov. de 2016
Respostas 11
Participantes 2