Resultado final não aparece

Olá!
Bem, estou desenvolvendo um programa aqui do exercicio Java.
Mas acontece que no resultado final ele não aparece.
Veja o código:

Código 1:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaman;

/**
 *
 * @author Gustavo
 */

import java.util.Scanner;
public class Main {

    /**
     * @param args the command line arguments
    */

        private String quilomentros;
        private String gasolina;
        private int recebeQuilomentros;
        private int recebeGasolina;
        private int result;


        //configura o quilomentros
        public void setCourseQuilomentros(String q)
        {
            quilomentros = q;

        }

        //retorna o valor quilomentros
        public String getCourseQuilomentros()
        {
            return quilomentros;
        }

        //configura a gasolina
        public void setCourseGasolina(String g)
        {
             gasolina = g;
        }

        //retorna a gasolina
        public String getCourseGasolina()
        {
            return gasolina;
        }

        public void calculaQuantidadeQuilometrosPercorridos()
        {
            int q = 0;
            int grade; //contador
            int recebeQuilomentros;

            Scanner input = new Scanner(System.in);

            grade = 0;
            recebeQuilomentros = 0;
            do {

                   System.out.println("Digite a quantidade quilomentros dirigidos,\n " +
                                      "ou digite -1 para sair do sistema.\n");
                   grade = input.nextInt();
                   this.recebeQuilomentros = recebeQuilomentros + grade;

            }while(grade != -1);

        }

        public void calculaQuantidadeGasolinaConsumida()
        {
            int g;
            int grade1;
            int recebeGasolina;

            //cria Scanner para obter dados a partir da janela de comando
            Scanner input = new Scanner(System.in);
            grade1 = 0;
            recebeGasolina = 0;

            do {
                System.out.println("Digite a quantidade de gasolina consumidos, \n" +
                                   "ou digite -1 para sair do sistema. \n");
                grade1 = input.nextInt();
                this.recebeGasolina = recebeGasolina + grade1;



            }while(grade1 != -1);

         
        }

        public void calculaMedia()
        {
            this.result = recebeQuilomentros + recebeGasolina;
            System.out.printf("Total: %d\n",result);
        }

}

Código 2:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaman;

/**
 *
 * @author Gustavo
 */

import java.util.Scanner;
public class Javaman {

    public static void main(String args[])
    {
  
        Main myMain = new Main();
        
        myMain.calculaQuantidadeQuilometrosPercorridos();
        myMain.calculaQuantidadeGasolinaConsumida();
        myMain.calculaMedia();




    }

}

Pq o resultado não aparece ?
Sendo que eu o atribui a total e a total1 e os declarei como variável local
E criei um método para que o result, receba o total + total1, para que assim o resultado dos dois métodos aparece, ou seja a soma, porém ela resulta 0.
Como é possivel ?

Aguardo…

ola, bem vindo ao forum

quando você calcula a quantidade de quilômetros percorridos no método determineClassQ você não está atribuindo o resultado para uma variável global da classe, neste caso ela só tem valor dentro do método

quando você chama o método determineClassG o valor da variável total está zerado pois ela não foi atribuida no método anterior

outra forma de se resolver isso é você fazer os métodos retornarem valores

tente colocar nomes mais sugestivos para os seus métodos algo assim

[code]int calculaQuantidadeQuilometrosPercorridos();

int calculaQuantidadeGasolinaConsumida();

int calculaMedia

void main() {
int quilometros = calculaQuantidadeQuilometrosPercorridos();
int gasolina = int calculaQuantidadeGasolinaConsumida();
int media = calculaMedia(quilometros, gasolina);
}[/code]

PS: outra coisa, dê uma olhada na lista de artigos no forum, pode ajudar … :slight_smile:

Olá André!

Então, eu atribui sim, veja:

 private  int total;  
 private int total1;  

eu o atribui os dois para o result, coloquei o valor de total recebe os valores digitados no determineClassQ() e o valor1 para o determineClassG(). Então eu criei o método determineClassCalc(), e fiz que result receberia o valor e valor1. Por fim o resultado não é atribuido, ele dá 0.

…Abraço!

oi,

dá uma olhada no método determineClassG especificamente na linha

result = total + total; 

vc vai ver que o valor de total está sempre zerado

Bem, não estou entendendo o que você está diretamente falando. Mas no caso, o unico erro é que nao especifiquei o certo é total1 no qual eu passei o valor de determineClassG, sendo que (valor) é o do método determineClassQ, mesmo assim o problema persiste: resultado 0.

Quanto ao código, o certo é no determineClassCalc();

oi,

vc está confundindo variavies locais com variaveis de instancia

no método determineClassQ quando você faz

total = total + grade;

vc está atribuindo para a variavel total do método, a qual pertence ao escopo local e não pode ser acessada em outro lugar

para você acessar a variavel de classe use o

de novo, mude o nome dos seus métodos, mude o nome das variaveis para nomes sugestivos

total, total1, determineClassQ é ruim, pense em escrever o código como se estivesse escrevendo em portugues, alguem um dia vai ter que ler e entender o que você está escrevendo

mesmo que seja um teste, procure se acostumar a ir fazendo assim… :smiley:

abs

Olá André!
Então, justamente isso, declarei as varáveis para as quais eu vou da os valores dos metodos para váriavel de instância, para que ela seja usada em outro método, ou seja: calculaMedia();
Seguindo as suas orientações, eu fiz como mandou: primeiramente alterei os nomes dos métodos para melhor visualização (sempre irei fazer isso) e também chamei o this para chamar as varáveis, e o que me retornou ?
Total: -2 . Veja:

run:
Digite a quantidade quilomentros dirigidos,
ou digite -1 para sair do sistema.

5
Digite a quantidade quilomentros dirigidos,
ou digite -1 para sair do sistema.

-1
Digite a quantidade de gasolina consumidos,
ou digite -1 para sair do sistema.

5
Digite a quantidade de gasolina consumidos,
ou digite -1 para sair do sistema.

-1
Total: -2
CONSTRUÍDO COM SUCESSO (tempo total: 9 segundos)

Rafael?? rs

neste caso ele está atribuindo -1 + -1 ou seja, -2, dê uma lida no código e veja se você nao precisa fazer uma verificação a mais…

dica: o laço do while é diferente do laço while(condicao)

abs

Hehe. Desculpe por chamar de Rafael, eu confundi… mas enfim já corrigi.
Bem, me explicaram errado o do…while ou eu entendi errado. Estou tendo problemas com o mesmo. Se possível vc me explicar qual a diferença ? E como eles funciona?

EDIT: Meu programa funcionou perfeitamente. Troquei o do…while por while e está ok fazendo as somas e tal’s. Muito obrigado por me ajudar, espero que seja recompensado não por mim mas por outros, pq quem ajuda também é ajudado. Enfim… obrigado mesmo.
Se você tiver alguma coisa sobre while e do…while, pq ainda tenho algumas dúvidas simples e quero encerra-las para não ter problemas posteriormente. Ou vc poder me explicar e dizer como funciona. Fico imensamente grato (mais que já estou). Enfim… obrigado.

…Abraços!

hehe, foi nada :slight_smile:

então, a diferença entre o while e o do while é na condição de teste

o while primeiro testa a condição, caso seja verdadeiro ele executa o que está dentro do laço

o do while executa o que está dentro do laço e só depois testa a condição

abs

hackum bom de mais? A diferença basica entre while e do-while é que, preste atenção:

[code]int contador = 0;

// No do-while ele vai sempre executar a primeira vez pq a verificaçao acontece no final. Entao nesse caso vc percebe que o contador é igual a zero e que eu falei pra ele repetir enquanto o contador for diferente de zero? Mesmo assim ele vai executar uma vez e imprimir everton, porque como eu falei no do-while ele sempre executa uma vez.
do{

System.out.println(“everton”);

}while(contador != 0)[/code]

Agora veja se fosse while somente:

[code]int contador = 0;

// Como aqui a verificaçao e feita no inicio nao vai ser impresso nenhuma vez “everton” pq o contador nao é diferente de 0.
while(contador != 0){

System.out.println(“everton”);

}[/code]

Entendeu?

foi mal Andre nao vi que vc tinha respondido :frowning:

Grande Everton, você novamente ? hehe…
Bem, entendi, aliás estou entendendo, portanto caso eu estiver errado por favor me corrija.
Analisando o meu código:

System.out.println("Digite a quantidade de gasolina consumidos, \n" +
                                   "ou digite -1 para sair do sistema. \n"); // aqui ele vai decidir se vai entrar no while, se entrar
grade1 = input.nextInt();

while(grade1 != -1)
            {
                 this.recebeGasolina = recebeGasolina + grade1;
                 System.out.println("Digite a quantidade de gasolina consumidos, \n" +
                                    "ou digite -1 para sair do sistema. \n");
                grade1 = input.nextInt();


            }

// ele faz esse procedimento, mas no caso eu digitar -1, 
ele simplesmente pula a ação e passa para a próxima. 

Mas o que eu não entendi pq eu tenho q colocar denovo o

System.out.println("Digite a quantidade de gasolina consumidos, \n" +
                                    "ou digite -1 para sair do sistema. \n");
                grade1 = input.nextInt();

dentro do while ?

Na verdade nao precisava de vc colocar isso fora do while…concorda que se vc colocar isso dentro:

1. System.out.println("Digite a quantidade de gasolina consumidos, \n" + 2. "ou digite -1 para sair do sistema. \n"); 3. grade1 = input.nextInt();

toda hora que repetir o while ele vai perguntar se o cara quer sair ou nao? Se vc nao coloca isso dentro, seu while vai repetir pra toda á eternidade, pq como que seu while vai terminar, sendo que o usuario nao sabe que tem que digitar -1 pra sair. Por isso vc coloca a verificaçao dentro do while para toda que repetir perguntar se vai sair ou vai continuar repetindo.

Então Everton,

daria o mesmo jeito esse código se eu o colocasse assim:

            while(grade != -1) {

                   this.recebeQuilomentros = recebeQuilomentros + grade;
                   
                   System.out.println("Digite a quantidade quilomentros dirigidos,\n " +
                                      "ou digite -1 para sair do sistema.\n");
                   grade = input.nextInt();
                   

                   }

Sim, a unica coisa que vc teria que fazer é garantir que grade seja diferente de -1 para ele poder entrar no while.