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 ?
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
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 …
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.
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();
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…
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)
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.
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){
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();
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.