nextLine

9 respostas
A

Galera boa Tarde.
estou fazendo, com intuito acadêmico, um sistema que calcula o consumo de um carro.

Bom, mas o problema esta no seguinte:
A condição do meu WHILE é que a String sentinela seja diferente de "n", e la embaixo, no bloco do WHILE pergunto ao usuario "Deseja calcular novamente". E seria para ele inserir o valor da String sentinela, mas o programa esta passando direto desse ponto, ele executa o System.out.print , mas nao espera o usuario inserir o valor.

alguem tem noção do que eu estou fazendo de errado??

obrigado.

System.out.print("Deseja calcular o consumo novamente (s/n)? " );        
            sentinela = input.nextLine();
            System.out.println();
import java.util.Scanner;

public class Consumo{
    
    private int kilometro;
    private int gasolina;
    private float consumo;
    private int kiloTotal;
    private int gasoTotal;
    private String sentinela;


    Scanner input = new Scanner( System.in );
    
    
    public void calcConsumo(){

        
        while ( sentinela != "n" ){
            System.out.print("Entre com a kilometragem percorrida: ");
            kilometro = input.nextInt();
            System.out.println();
            System.out.print("Entre com a gasolina comsumida: " );
            gasolina = input.nextInt();
            System.out.println();
            
            consumo = (float)kilometro / gasolina;
            kiloTotal = kiloTotal + kilometro;
            gasoTotal = gasoTotal + gasolina;
            
            System.out.printf("%s%.2f\n", "A media de consumo do seu carro foi: ", consumo);
            System.out.printf("%s%d%s\n", "Ate agora seu carro percorreu: ", kiloTotal, " kilometros" );

            System.out.print("Deseja calcular o consumo novamente (s/n)? " );        
            sentinela = input.nextLine();
            System.out.println();

        }

            System.out.print("PROGRAMA ENCERRADO");
    
   } 

}

Obs: a classe UsaConsumo é que executa o programa.

9 Respostas

thiago.correa
import java.util.Scanner;
 
 public class Consumo{
     
     private int kilometro;
     private int gasolina;
     private float consumo;
     private int kiloTotal;
     private int gasoTotal;
     private String sentinela;
 
 
     Scanner input = new Scanner( System.in );
     
     
     public void calcConsumo(){
 
         
         while ( !sentinela.equalsIgnoreCase( "n" ) ){
             System.out.print("Entre com a kilometragem percorrida: ");
             kilometro = input.nextInt();
             System.out.println();
             System.out.print("Entre com a gasolina comsumida: " );
             gasolina = input.nextInt();
             System.out.println();
             
             consumo = (float)kilometro / gasolina;
             kiloTotal = kiloTotal + kilometro;
             gasoTotal = gasoTotal + gasolina;
             
             System.out.printf("%s%.2f\n", "A media de consumo do seu carro foi: ", consumo);
             System.out.printf("%s%d%s\n", "Ate agora seu carro percorreu: ", kiloTotal, " kilometros" );
 
             System.out.print("Deseja calcular o consumo novamente (s/n)? " );
             input.nextLine();
             sentinela = input.nextLine();
             System.out.println();
 
         }
 
             System.out.print("PROGRAMA ENCERRADO");
     
    } 
     
     public static void main(String[] args) {
		new Consumo().calcConsumo();
	}
 
 }
Eu não sei porque o Java tem disso, mas inserindo um nextLine a mais resolve o problema.

:arrow: Igualdade entre strings é com o método equals ou equalsIgnoreCase não com '==', lembre Java não é C!!!!!!

LPJava

poe assim

next();
A
thiago.correa:
import java.util.Scanner;
 
 public class Consumo{
     
     private int kilometro;
     private int gasolina;
     private float consumo;
     private int kiloTotal;
     private int gasoTotal;
     private String sentinela;
 
 
     Scanner input = new Scanner( System.in );
     
     
     public void calcConsumo(){
 
         
         while ( !sentinela.equalsIgnoreCase( "n" ) ){
             System.out.print("Entre com a kilometragem percorrida: ");
             kilometro = input.nextInt();
             System.out.println();
             System.out.print("Entre com a gasolina comsumida: " );
             gasolina = input.nextInt();
             System.out.println();
             
             consumo = (float)kilometro / gasolina;
             kiloTotal = kiloTotal + kilometro;
             gasoTotal = gasoTotal + gasolina;
             
             System.out.printf("%s%.2f\n", "A media de consumo do seu carro foi: ", consumo);
             System.out.printf("%s%d%s\n", "Ate agora seu carro percorreu: ", kiloTotal, " kilometros" );
 
             System.out.print("Deseja calcular o consumo novamente (s/n)? " );
             input.nextLine();
             sentinela = input.nextLine();
             System.out.println();
 
         }
 
             System.out.print("PROGRAMA ENCERRADO");
     
    } 
     
     public static void main(String[] args) {
		new Consumo().calcConsumo();
	}
 
 }
Eu não sei porque o Java tem disso, mas inserindo um nextLine a mais resolve o problema.

:arrow: Igualdade entre strings é com o método equals ou equalsIgnoreCase não com '==', lembre Java não é C!!!!!!

Esse problema do NExtLine so da pau quando ta dentro do "While?"
por que sempre funcionou normal..

outra coisa.. coloquei da forma que voce instruiu, e minha class UsaConsumo
public class UsaConsumo
{
   
    public static void main (String args []){
        Consumo con = new Consumo();
        con.calcConsumo();
    }
    
    
}

não ta executando...

thiago.correa
import java.util.Scanner;
 
 public class Consumo{
     
     private int kilometro;
     private int gasolina;
     private float consumo;
     private int kiloTotal;
     private int gasoTotal;
     private String sentinela;
 
 
     Scanner input = new Scanner( System.in );
     
     
     public void calcConsumo(){
 
         
         while ( !"n".equalsIgnoreCase( sentinela ) ){
             System.out.print("Entre com a kilometragem percorrida: ");
             kilometro = input.nextInt();
             System.out.print("Entre com a gasolina comsumida: " );
             gasolina = input.nextInt();
             
             consumo = (float)kilometro / gasolina;
             kiloTotal = kiloTotal + kilometro;
             gasoTotal = gasoTotal + gasolina;
             
             System.out.printf("%s%.2f\n", "A media de consumo do seu carro foi: ", consumo);
             System.out.printf("%s%d%s\n", "Ate agora seu carro percorreu: ", kiloTotal, " kilometros" );
 
             System.out.print("Deseja calcular o consumo novamente (s/n)? " );
             sentinela = input.next();
             System.out.println();
 
         }
 
             System.out.print("PROGRAMA ENCERRADO");
     
    } 
     
     public static void main(String[] args) {
		new Consumo().calcConsumo();
	}
 
 }

além da correção sugerida pelo colega, corrigi um erro que eu acabei colocando!!! Falha nossa!!!

A

Valeu Brigadão…

só uma duvida cara. esse problema do nextLine, só aconteçe quando ta dentro de um WHILE?

outra coisa. eu nunca posso usar “==” pra comparar String? nem no WHILE, nem no IF ?

obrigado.

thiago.correa

Sim esse erro ocorre dentro de for, while e do…while.

Quanto a comparação você tem que se lembrar que está trabalhando com objetos, ou seja, usando ‘==’ você estará vendo se ambos os objetos possuem a mesma referência. ‘==’ pode ser usado também para tipos primitivos ou seja 1==2; ‘a’ == ‘c’ e por aí vai.

:arrow: Sempre que for reportar um erro seja mais específico e tente reunir mais informações sobre o mesmo, simplesmente dizer que ocorreu um erro fica muuuuuuuuito difícil de lhe ajudar!!!

A

nao entendi muito bem essa parte. o que seria REFERENCIA?

bom, de qualquer forma muito obrigado.e realmente pensando aqui, era mais facil eu usar um char que o String.

abraço.

thiago.correa

Referência para um endereço de memória!!! Todo e qualquer Objeto possui uma referência para um endereço de memória!

L

Utilize somente o next()

Criado 31 de maio de 2007
Ultima resposta 1 de jun. de 2007
Respostas 9
Participantes 4