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();
[code]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");
}
} [/code]
Obs: a classe UsaConsumo é que executa o programa.
[code]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();
}
}[/code]
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!!!
[quote=thiago.correa][code]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();
}
}[/code]
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!!![/quote]
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
[code]public class UsaConsumo
{
public static void main (String args []){
Consumo con = new Consumo();
con.calcConsumo();
}
}[/code]
não ta executando…
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!!!
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.
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!!!
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.
Referência para um endereço de memória!!! Todo e qualquer Objeto possui uma referência para um endereço de memória!