Dificuldade com lógica

2 respostas
N
Queria saber como faço para somar o total de kilowats tendo um for de 1 até 10 por exemplo. Agradeço a todos.
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);

	}

}

2 Respostas

jc_caetano

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
muehlner

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

Criado 12 de outubro de 2012
Ultima resposta 12 de out. de 2012
Respostas 2
Participantes 3