GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problemas para rodar o codigo Java

Boa noite, alguém poderia me ajudar a entender o que tem de errado no código. Tentei de tudo e não achei o erro.

import java.util.Scanner;

public class Gastos
{
	
	public static void main( String[] args)
	{
	
		Scanner input = new Scanner(System.in);

// declaração de variavei

		int gasto = 0;
		int contadorGasto = 1;
		int total = 0;
		int media;
		String descricao;
		int maiorValor = 0;
		int alim=0;

// iniciando o laço
// bloco de inserção de dados

while (contadorGasto <=10);
	  {
	System.out.print("Digite valor do gasto:");
		gasto=input.nextInt();

	System.out.print("digite a descricao do gasto:");
		descricao=input.next();

		total = total + gasto;
			contadorGasto = contadorGasto + 1;

				if(maiorValor < gasto){
					maiorValor=gasto;

	  }
	
		}	

		
	media= total/10;
	System.out.printf("sua media de gastos e"+contadorGasto+" %d%n", media);	


	if(descricao.Equals("alimentacao")) {
	 	 if(gasto >= 10 && gasto <= 20)
		System.out.printf("Seu maior gasto foi com %d%N",descricao);
	  
		alim = alim += gasto;
		alim += gasto;

	} else {
	       System.out.print("não foram informados gastos com alimentação");
}


	 
	 System.out.print("Voce gastou com alimentacao:",alim);
			
}

}

Qual o erro que você está vendo quando executa o código?

Qual é o problema?

Observação 1: é equals() e não Equals()
if(descricao.Equals("alimentacao")) {

Observação 2: provável erro…
alim = alim += gasto;

Isso significa: alim = alim = alim + gasto;

Obrigado! Pela dica.

Mais ainda esta dando esse erro.

Erro 1: Ponto e virgula logo após os parenteses do while.

while (contadorGasto <=10);

Erro 2: O correto é equals, com o “e” minúsculo.

if (descricao.Equals("alimentacao")) {

Erro 3: Vc colocou uma virgula onde, muito provavelmente, vc deveria por o operador +.

System.out.print("Voce gastou com alimentacao:",alim);

Erro 4: Vc deveria inicializar a variável descricao.

String descricao;

Erro 5: Na verdade não é um erro, mas a primeira linha não faz sentido e a segunda ta somando o gasto pela segunta vez.

alim = alim += gasto;
alim += gasto;

Erro 6: Vc deveria invocar o método close do Scanner.

Observações:

  1. Como vc está trabalhando com dinheiro, o que inclui números com virgula, seria melhor usar o tipo double ao invés de int. Ainda não é o ideal pra se trabalhar com dinheiro em Java, mas é o suficiente para este exercicio.
  2. A variável contadorGasto deveria começar com o valor 0 e não com 1.xx

Consertei o código, porém o depois do while o código não executa.
import java.util.Scanner;

public class Gastos
{
	
	public static void main( String[] args)
	{
	
		Scanner input = new Scanner(System.in);

// declaração de variavei

		double gasto = 0;
		double contadorGasto = 0;
		double total = 0;
		double media;
		String descricao = "descricao";
		double maiorValor = 0;
		double alim=0;

// iniciando o laço
// bloco de inserção de dados

while (contadorGasto <=10)
	  {
	System.out.print("Digite valor do gasto:");
		gasto=input.nextDouble();

	System.out.print("digite a descricao do gasto:");
		descricao=input.next();

		total = total + gasto;
			contadorGasto = contadorGasto + 1;

				if(maiorValor < gasto){
					maiorValor=gasto;

	  }
	
		}	

		
	media= total/10;
	System.out.printf("sua media de gastos e"+contadorGasto+" %d%n", media);	


	if(descricao.equals("alimentacao")) {
	 	 if(gasto >= 10 && gasto <= 20)
		System.out.printf("Seu maior gasto foi com %d%n",descricao);
	  
		
		alim += gasto;

	} else {
	       System.out.print("não foram informados gastos com alimentação");
}


	 
	 System.out.print("Voce gastou com alimentacao:"+alim);
			
}

}

Eu testei aqui e vi que executa sim, só que dá o erro abaixo:

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double

É por causa dessa linha:

System.out.printf("sua media de gastos e" + contadorGasto + " %d%n", media);

Acontece que media agora é double e o %d serve pra imprimir apenas números inteiros. Basta mudar para %f.

System.out.printf("sua media de gastos e" + contadorGasto + " %f%n", media);

Testa e se der erro, explica melhor que tipo de erro aparece e que mensagem apareceu também.

Então cara, consertei, porém, continua a rodar só a primeira parte.

para ai

Manda o código corrigido, pra eu testar.

import java.util.Scanner;

public class gastos
{
	
	public static void main( String[] args)
	{
	
		Scanner input = new Scanner(System.in);

// declaração de variavei

		double gasto = 0;
		double contadorGasto = 0;
		double total = 0;
		double media;
		String descricao = "descricao";
		double maiorValor = 0;
		double alim=0;

// iniciando o laço
// bloco de inserção de dados

while (contadorGasto <=10)
	  {
	System.out.print("Digite valor do gasto:");
		gasto=input.nextDouble();

	System.out.print("digite a descricao do gasto:");
		descricao=input.next();

		total = total + gasto;
			contadorGasto = contadorGasto + 1;

				if(maiorValor < gasto){
					maiorValor=gasto;

	  }
	
		}	

		
	media= total/10;
	System.out.printf("sua media de gastos e"+contadorGasto+" %f%n", media);	


	if(descricao.equals("alimentacao")) {
	 	 if(gasto >= 10 && gasto <= 20)
		System.out.printf("Seu maior gasto foi com %f%n",descricao);
	  
		
		alim += gasto;

	} else {
	       System.out.print("não foram informados gastos com alimentação");
}


	 
	 System.out.print("Voce gastou com alimentacao %f%n:"+alim);
			
}

}

Fiz uma alterações:

import java.util.Scanner;

public class gastos {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double gasto;
        int contadorGasto = 0;
        double total = 0;
        double media;
        String descricao = "descricao";
        double maiorValor = 0;
        int quantidadeMaximaDeGastos = 3;
        int quantidadeDeGastosComAlimentacao = 0;
        double maiorGastoComAlimentacao = Double.NEGATIVE_INFINITY;

        while (contadorGasto < 3) {
            System.out.print("Digite valor do gasto:");
            gasto = input.nextDouble();

            System.out.print("digite a descricao do gasto:");
            descricao = input.next();

            if ("alimentacao".equals(descricao)) {
                quantidadeDeGastosComAlimentacao++;
                if (gasto > maiorGastoComAlimentacao)
                    maiorGastoComAlimentacao = gasto;
            }

            total = total + gasto;
            contadorGasto = contadorGasto + 1;

            if (maiorValor < gasto) {
                maiorValor = gasto;
            }
        }

        media = total / quantidadeMaximaDeGastos;
        System.out.printf("Sua media de gastos é %d R$ %.2f%n", contadorGasto, media);

        if (quantidadeDeGastosComAlimentacao > 0) {
            System.out.printf("Seu maior gasto com alimentação foi de %.2f%n", maiorGastoComAlimentacao);
        } else {
            System.out.println("Não foram informados gastos com alimentação");
        }
    }
}

tenho uma duvida de fazer um codigo, podem ajudar por favor