While básico?Resolvido

4 respostas
programaçãoobjetojava
Dfodani

Estou tentando fazer um do while básico ja vi alguns exemplos e tentei fazer porem so aparece digite o salario e deseja continuar sim ou nao? nao deixa nem eu digitar ja sai do programa segue código.

import java.util.Scanner;

public class ProgramaPrincipalFuncionario {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        Funcionario f = new Funcionario();
        String continua;
        
        do{
        	System.out.println("Digite o salário ");
        	double salario = scan.nextDouble();
        	System.out.println("Deseja Continuar S/N");
        	continua = scan.nextLine();     	
    
        }while(continua.equalsIgnoreCase("Sim"));
        if(continua.equalsIgnoreCase("Sim")){
        	System.out.println("Digite o salário ");
        	double salario = scan.nextDouble();
        }if(continua.equalsIgnoreCase("Não"))
        System.out.println("Você saiu do sistema");
      
	}
}

4 Respostas

Henriqueyun

Bom, em primeiro lugar, sugiro que você altere o titulo do tópico pra que se adeque as sugestões do guia da comunidade.

Agora, tratando do seu problema, acontece que seu objeto da classe Scanner foi instânciado fora do seu do-while, então quando você pega um valor e passa pra sua váriavel, no Scanner permanece armazenado ainda as informações que foram passadas anteriormente, e não se pode simplesmente se escrever por cima, como se fosse um tipo de dados primitivo, você precisa de uma nova instância pra poder colocar um novo valor.

L

@Henriqueyun devo discordar de você, o problema não tem nada haver com instância do Scanner dentro ou fora do laço, aliás por questões de performance e consumo de memória é justamente o que deve ser evitado instanciar um Scanner a cada rodada do laço…

@Dfodani o problema é que métodos do Scanner como nextInt, nextFloat, nextDouble etc, não fazem a leitura correta deixando um buffer (caractere de nova linha geralmente o \n), enfim, para tratar esse bug você precisa declarar um nextLine sem atribuição antes…

...
scan.nextLine(); // limpa o buffer de entrada...
System.out.println("Deseja Continuar S/N");
continua = scan.nextLine();
...

Veja se revole…

Henriqueyun

Bom, então sinto muito pela informação errada, é que a última vez que utilizei essa classe foi no meu curso, e na época, meu professor explicou que era como um tipo de váriavel que se declarava, preenchia e depois “resetava” para poder usar novamente, tanto que na apostila o pessoal usou dessa forma.
Enfim, foi mal aí, valeu pelo esclarecimento.

Dfodani

ola obrigada deu certo agora

Criado 30 de abril de 2017
Ultima resposta 1 de mai. de 2017
Respostas 4
Participantes 3