Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ajuda com exercício

Boa tarde a todos. Estou praticando Java e estou tentando resolver uma lista de exercícios, gostaria de saber se alguém pode me ajudar com essa questão:

Esse é o enunciado: Faça um algoritmo que receba o preço de custo e o preço de venda de 5 produtos. Mostre como resultado se houve lucro, prejuízo ou empate para cada produto. Informe o valor de custo de cada produto, o valor de venda de cada produto, a média de preço de custo e do preço de venda.

Fiz o seguinte código:

package Exercicio22;

import java.util.InputMismatchException; import java.util.Scanner;

public class App {

public static void main(String[] args) throws InputMismatchException {

double precoCusto;
double precoVenda;
String nomeProduto;
double totalCusto = 0;
double totalVenda = 0;
double mediaVendas;
double mediaCustos;

Scanner leitor = new Scanner(System.in);

int i = 0;
for (; i < 5; i++) {
    System.out.println("Informe o nome do produto: ");
    nomeProduto = leitor.nextLine();
    System.out.println("Qual o preço de custo? ");
    precoCusto = leitor.nextDouble();
    System.out.println("Qual o preço de venda?");
    precoVenda = leitor.nextDouble();
    if (precoCusto == precoVenda){
        System.out.println("Houve um empate nos valores.");
    } else { 
        if (precoCusto > precoVenda) {
            System.out.println("Houve prejuízo nesse item.");
        } else {
            System.out.println("Houve lucro nesse item.");
        }
    }
    System.out.println("O valor do custo desse item é de R$ " + precoCusto);
    System.out.println("O valor de venda desse item é de R$ " + precoVenda);
    totalCusto = totalCusto + precoCusto;
    totalVenda = totalVenda + precoVenda;
    }
mediaVendas = totalVenda / i;
mediaCustos = totalCusto / i;
System.out.println("A media do preço de venda é de R$ " + mediaVendas);
System.out.println("A media do preço de custo é de R$ " + mediaCustos);
}

}

Porém quando ele compila, está ficando errado a ordem do funcionamento, ele executa as primeiras perguntas de forma correta e depois finaliza dessa forma:

Print do resultadoAs 3 primeiras perguntas preenchi de forma correta, porém na segunda pergunta ele já aparece também perguntando o preço de custo. Alguém consegue dar uma luz?

3 respostas

Consegui resolver essa questão da linha, apenas pra constar a resolução foi a seguinte:

Adicionei uma chamada nextLine() depois de cada nextDouble() para consumir a quebra de linha pendente.

precoCusto = leitor.nextDouble(); leitor.nextLine(); // adicionando essa linha para consumir a quebra de linha System.out.println("Qual o preço de venda?"); precoVenda = leitor.nextDouble(); leitor.nextLine(); // adicionando essa linha para consumir a quebra de linha

solução!

Olá Ramon, tudo bem?

Pelo que pude perceber, o problema está ocorrendo porque você está utilizando o método nextDouble() para ler os valores de preço de custo e preço de venda. Esse método não consome o caractere de quebra de linha (enter) que digitamos após inserir o valor, e por isso, na próxima vez que você utilizar o método nextLine(), ele irá consumir esse caractere e não irá esperar que você digite uma nova entrada.

Para resolver esse problema, você pode utilizar o método nextLine() após cada nextDouble(), para consumir esse caractere de quebra de linha. Ficaria assim:

precoCusto = leitor.nextDouble();
leitor.nextLine(); // Adicione essa linha para consumir o caractere de quebra de linha
System.out.println("Qual o preço de venda?");
precoVenda = leitor.nextDouble();
leitor.nextLine(); // Adicione essa linha para consumir o caractere de quebra de linha

Dessa forma, o programa irá funcionar corretamente. Espero ter ajudado e bons estudos!

Ajudou sim, demais, realmente era isso mesmo. Obrigado pela força