[Resolvido]Problemas para mostrar media

2 respostas
F

Tenho o seguinte exercicio:

16) Desenvolva classe e métodos, necessários para receber números positivos, seqüencialmente, um a um, até que

seja fornecido um número negativo (Sentinela). Quando isto ocorrer, deverá ser apresentada à média dos números

digitados.

Exemplo: Média: Entrada 1: 2

Entrada 2: 9

Entrada 3: 4

Entrada 4: 5

Entrada 5: -1 (Sentinela: Término do laço de entrada)

Saída: Média = 5.0

Fiz o codigo e deu tudo certo, mas na hora de mostrar a media sempre da 0...achei que o contador estava errado, mas ele esta funcionando normalmente.

import javax.swing.*;

public class exerc16
{
   public void exerc16()
   {
      int valor = 0;
      int contador = 0;
      int media = 0;
      
      while(valor !=  -1)
      {
         valor = Integer.parseInt (JOptionPane.showInputDialog(null, "Digite valores positivos. Para sair digita -1"));
         media =+ valor;
         contador++;
        
         
         if(valor <= -1)
         {
            media = media / contador;
            JOptionPane.showMessageDialog(null, "A media dos valores eh: " +media);
         }
      }
   }    
}

2 Respostas

F

Consegui resolver...vejam:

import javax.swing.*;

public class exerc16
{
   public void exerc16()
   {
      int valor = 0;
      int contador = 0;
      int total = 0;
      
      while(valor !=  -1)
      {
         valor = Integer.parseInt (JOptionPane.showInputDialog(null, "Digite valores positivos. Para sair digita -1"));
         if (valor > -1)
         {
            total = total + valor;
            contador++;
         }
         
         else if(valor <= -1)
         {
            int media = total / contador;
            JOptionPane.showMessageDialog(null, "A media dos valores eh: " +media);
         }
      }
   }    
}
explosive_spirit

Bom que você conseguiu encontrar uma solução e não quis nada pronto do fórum, parabéns e continue nesse ritmo, agora posso fazer uma sugestão de melhoria no seu código?

import javax.swing.*;  
  
public class exerc16  
{  
   public void exerc16()  
   {  
      int valor = 0;  
      int contador = 0;  
      int total = 0;  
        
      while ( (valor = Integer.parseInt (JOptionPane.showInputDialog(null, "Digite valores positivos. Para sair digita -1")) ) &gt;  -1)  // atente-se aos parênteses nessa linha entre ( valor = ... ) &gt; -1
      {  
         total = total + valor;  
         ++contador;  
      }
      
      if (contador &gt; 0) {
         int media = total / contador;
         JOptionPane.showMessageDialog(null, "A media dos valores eh: " +media);
      }
   }      
}

Algumas observações:

1 - Tendo em vista que você pediu para o usuário digitar apenas valores positivos, não faz sentido o while ter valor != -1;

2 - Como o -1 é seu sentinela, você não precisa fazer um if dentro do while para testá-lo, pode fazer a atribuição a valor entre parênteses que assim que valor tiver o número irá testar se é -1 e caso positivo sairá;

3 - O ++ na frente de contador  um pouco mais de performance ao seu algoritmo, tendo em vista que se trata de um comando isolado (apenas incrementar o contador), não afetará outras variáveis dentro do while;

4 - O else que você colocou não é necessário, pois quando o laço terminar, obrigatoriamente você terá de calcular e exibir a média;

5 - O if final serve para garantir que a média não será dividida por zero, mesmo que também seja zero;

Desculpe ser chato, mas é bom você começar a estudar esses macetes logo quando está iniciando programação/java, pois assim você começa a treinar mais sua mente para fazer algoritmos melhores e com poucas linhas.

Espero ter ajudado.

Criado 6 de outubro de 2013
Ultima resposta 7 de out. de 2013
Respostas 2
Participantes 2