import javax.swing.JOptionPane;
public class energia {
/**
* @param args
*/
public static void main(String[] args) {
double total=0;
double total1=0;
double total2=0;
double soma = 0;
double somatotal = 0;
for(int i=1;i<=3;i++){
int numCons=Integer.parseInt(JOptionPane.showInputDialog("Número do consumidor"));
double kw=Double.parseDouble(JOptionPane.showInputDialog("Qtde kilowats"));
String tipo=JOptionPane.showInputDialog("Residencial Comercial Industrial");
if(tipo.equalsIgnoreCase("Residencial")){
total = kw*0.3;
}
if(tipo.equalsIgnoreCase("Comercial")){
total1 = kw*0.5;
}
if(tipo.equalsIgnoreCase("Industrial")){
total2 = kw*0.7;
}
soma = total+total1+total2;
somatotal = somatotal+soma;
}
JOptionPane.showMessageDialog(null, "A soma total é: "+somatotal);
}
}
Dificuldade com lógica
2 Respostas
Boa noite,
Acho que é bom você colocar else if no lugar de if, pois assim o algoritmo deixa de verificar todas as três condições.
Para evitar a variável total, eu coloquei o próprio total de cada condição recebendo ele próprio e a atualização.
A soma pode ficar do lado de fora do for, como você vê no código abaixo.
Obs.: Se você não for utilizar posteriormente as variáveis total1 e total2, use apenas a variável total, assim você economiza variáveis.
import javax.swing.JOptionPane;
public class energia {
/**
* @param args
*/
public static void main(String[] args) {
double total=0;
double total1=0;
double total2=0;
double somatotal = 0;
for(int i=1;i<=3;i++){
int numCons=Integer.parseInt(JOptionPane.showInputDialog("Número do consumidor"));
double kw=Double.parseDouble(JOptionPane.showInputDialog("Qtde kilowats"));
String tipo=JOptionPane.showInputDialog("Residencial Comercial Industrial");
if(tipo.equalsIgnoreCase("Residencial")){
total = total + kw*0.3;
}
else if(tipo.equalsIgnoreCase("Comercial")){
total1 = total1 + kw*0.5;
}
else if(tipo.equalsIgnoreCase("Industrial")){
total2 = total2 + kw*0.7;
}
} //fim for
// Atualiza a soma total
somatotal = total+total1+total2;
JOptionPane.showMessageDialog(null, "A soma total é: "+somatotal);
} //fim main()
} //fim class energia
Ola
Então em minha opinião esse código esta bem procedural
as varias formas de revolver isso melhor
eu aplicaria um “strategy” criando um interface de contrato com um método em especifico (para a classe que implementar) no lugar de cada if que você colocou
Bom para saber melhor do design “strategy” a própria caelum disponibiliza um vídeo “Tutorial” free a respeito na parte de cursos online
espero ter ajudado