Duvida com loop seguido de condicional if [resolvido]

Ola pessual torno eu aki com esta mardita dessa lógica.

preciso escrever um programa que receba vaios inteiros do teclado. E no final imprima a média dos numeros multiplos de 3. e para sair digito zero.

vou postar o que fiz mas nao ta rodando legal, sera que poderiam me dar uma força mais uma vez amigos.

package Exercicios;

import javax.swing.*;

import java.text.DecimalFormat;

public class média_tres 
{

	public static void main(String[] args) 
	{   
	        int cont = 0;
			double media,num = 0, soma = 0;
	        while (num!=0)   
	        {   
	            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));   
	            	if (num >= 0 && num%3==0)   
	            	{   
	            		System.out.println(num);}   
	            		cont++;
	        }
	            		soma = soma + num;    
	            		
	            		

	       
	            		DecimalFormat aproximador = new DecimalFormat("0.00");
	        
	        		System.out.println("A soma é " + soma);   
	        		System.out.println("A quantidade de numeros digitados é " + cont);   
	        		media = soma/cont;
	        		System.out.println("A media é " +aproximador.format(media));   
	}


}

Seu erro era simples.

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

/**
 *
 * @author Gustavo
 */
import javax.swing.*;

import java.text.DecimalFormat;

public class media_tres {

    public static void main(String[] args) {
        int cont = 0;
        double media, num = 0, soma = 0;
        do {
            num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE));
            soma = soma + num;
            if (num >= 0 && num % 3 == 0) {
                System.out.println(num);
            }
            cont++;
        }while (num != 0);

        DecimalFormat aproximador = new DecimalFormat("0.00");

        System.out.println("A soma é " + soma);
        //diminui o cont de uma unidade porque ele estava somando o valore ZERO
        System.out.println("A quantidade de numeros digitados é " + (cont - 1));
        media = soma / cont;
        System.out.println("A media é " + aproximador.format(media));
    }
}

A soma estava fora do while.
E a variavel num estava começando de zero, ou seja , nao entrava no while
O contador conta quando vc digita zero tambem, por isso eu diminui ele de uma unidade.
Caso nao queira mudar a variavel num para 1, mude o while para do{}while();

flw

O seu erro é que você colocou a soma fora do laço “if”.

Fiz as alterações no seu código:


             int cont = 0;  
             double media, num = 0, soma = 0;  

             do {
                   num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", 
                                    "Numero", JOptionPane.QUESTION_MESSAGE));     
                     
                   if (num >= 0 && num%3==0)  {     
                         System.out.println(num);     
                         cont++;  
                         soma = soma + num;      
                   }
             } while (num != 0); 
             
             // aqui decremento o "cont" que é o do valor "0" que é digitado para sair.
             cont--;            
              
             DecimalFormat aproximador = new DecimalFormat("0.00");  
               
             System.out.println("A soma é " + soma);     
             System.out.println("A quantidade de numeros digitados é " + cont);     
             media = soma/cont;  
             System.out.println("A media é " +aproximador.format(media));    

[quote=WendersonLP]O seu erro é que você colocou a soma fora do laço “if”.

Fiz as alterações no seu código:

[code]

         int cont = 0;  
         double media, num = 0, soma = 0;  

         do {
               num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um numero", 
                                "Numero", JOptionPane.QUESTION_MESSAGE));     
                 
               if (num >= 0 && num%3==0)  {     
                     System.out.println(num);     
                     cont++;  
                     soma = soma + num;      
               }
         } while (num != 0); 
         
         // aqui decremento o "cont" que é o do valor "0" que é digitado para sair.
         cont--;            
          
         DecimalFormat aproximador = new DecimalFormat("0.00");  
           
         System.out.println("A soma é " + soma);     
         System.out.println("A quantidade de numeros digitados é " + cont);     
         media = soma/cont;  
         System.out.println("A media é " +aproximador.format(media));    

[/code][/quote]

Caramba deu certinho essa lógica por causa de besteira mesmo eu não tava conseguindo, mais uma vez gradeço, sem palavras para agradecer.

Abração pessual.

Cara, se nao estou enganado, tente as seguintes alteracoes:

import javax.swing.JOptionPane;
      
public class MediaTres {  
	public static void main(String[] args) {     
		int cont = 0;  
        double media,num = 1, soma = 0;  
        while (num !=0 ){   
        	String x = JOptionPane.showInputDialog(null, "Digite um numero", "Numero", JOptionPane.QUESTION_MESSAGE);
            try{
            	num = Integer.parseInt(x);   
                //veja q a condicao aqui tem que ser num > 0 e nao >=0
                if (num > 0 && num % 3 == 0){     
                	System.out.println(num);
                    soma = soma + num; 
                    cont++;  
                }
            }catch (NumberFormatException nfe) {
				//fazemos num == 1 para entrar no laco novamente
                num = 1;
			}
                           
        }
          
	    System.out.println("A soma é " + soma);     
        System.out.println("A quantidade de numeros digitados é " + cont);     
        media = soma/cont;  
        System.out.println("A media é " +media);     
	}  
}   

Ate mais