Duvida com um problema Basico

8 respostas
R

Caraca... Estou iniciando com Java. Minhas tentativam andam mais depois param..
Estou com duvida em responder essas 3 questoes...
Se alguem puder me ajudar...

tow tentando mesmo, a primeira por exemplo empakei assim

// Fig. 7.7: Projeto2.java
//Gera numeros de 1 a 100, 1000 vezes.
import java.util.Random;

public class Projeto2
{
   public static void main( String args[] )
   {
      Random randomNumbers = new Random(); // gerador de número aleatório
      int frequency[] = new int[ 101 ]; // array de contadores de freqüência
	int maior=0;// armazena maior numero
	int menor=200;// armazena menor numero
	int media;// armazena a media dos numeros
	int soma=0;// armazena a soma

{	
	
       // Roda 1000 vezes; 
      for ( int roll = 1; roll <= 1000; roll++ ) 
             ++frequency[ 1 + randomNumbers.nextInt( 100 ) ];
      }
     for ( int counter = 1; counter <= 100; counter++ )

{
 	if (frequency[counter] > maior)
	 maior = frequency[counter];
	if(frequency[counter] < menor)
	menor = frequency[counter];
	soma = soma + frequency[counter];
}
      System.out.printf( "%s%12s\n", "Numero", "Frequencia" );
         // gera saída do valor de cada elemento do array
      for ( int face = 1; face < frequency.length; face++ )
         System.out.printf( "%4d%12d\n", face, frequency[ face ] );
	media=soma/1000;
         System.out.printf( "                        media %5d \n ",   media );// exibe  a media dos numeros
         System.out.printf( "                        maior %5d  \n",  maior );// exibe maior numero
         System.out.printf( "                        menor %5d  \n",  menor );// exibe menor numero


	
            } // fim de main
} // fim da classe Projeto1

mas o resultado da media e do maior e menor valor da errado...
ele pede pra voce pegar numeros de 1 a 100, rodar 1000 vezes, mostrar a frequencia de cada 1 e o maior menor, e a media deles....
por favor ajudem me

8 Respostas

fjvasconcellos

Olá Renan_w,

Eu não vi onde vc inicializa o seu vetor frequency com os dados (numeros de 1 a 100);

tipo assim:

int[] frequency = new int[100];//vetor de int com 100 posições //para adicionar os valores no vetor. for(int v=0;v<frequency.lenght();v++){ frequency[v]= v+1;//vai adicionar numeros de 1 a 100 no vetor sequencialmente, não sei se é isso que vc quer.... }
Não etendi muito bem oqeu vc quer fazer com rodar 1000 veses…

ps: use as tags CODE para adicionar codigo, facilita a leitura!!

Abraço…>

R

Irei tentar explicar melhor…
Estou tentando fazer 1 programa, que gere aleatoriamente 1000 vezes numeros de 1 a 100.
Depois disso preciso mostrar quantas vezes cada numero de 1 a 100 apareceu.
Logo em seguida mostrar o maior, o menor, e a media dos numero de 1 a 100. (Pois nem todos sao obrigatorios aparecerem.)

Eis a bronca. Tow pedindo penico aki, ta estourando ja
por favor ajudai-me!! :smiley:

rodrigo1

Você tá mostrando a maior frequencia e não o maior valor....

cria uma variável para armazenar o maior valor;

por exemplo:

int maiorValor=0;

e dentro do for guarda o maior valor:

for (int counter = 1; counter <= 100; counter++)

		{
			if (frequency[counter] > maior){
				maior = frequency[counter];
				maiorValor = counter;
			}

.....

rodrigo1

Ah …

E na média, vc tem que fazer um if para ver qual frequência é igual a zero, e dentro do for vai somando o counter quando a frequência não for zero …

espero ter ajudado …

dmandrak

O que o mestre dos magos falou está correto.

Da maneira como você está fazendo, suas comparações são feitas com a frequência de cada elemento, mas o que você vai guardar é O ELEMENTO.

Do tipo, o 12 aparece 25 vezes e por enquanto é o maior.

Então sua variável maior tem que ser 12 (!!!) e não 25.

Por isso vc precisa do maiorValor que o honorável #rodrigo# falou.

Ah …

E na média, vc tem que fazer um if para ver qual frequência é igual a zero, e dentro do for vai somando o counter quando a frequência não for zero …

espero ter ajudado …

Cuidado com isso também.

fjvasconcellos

segue um exemplo, fiz agora aqui, mais não sei se é isso que vc deseja fazer

import javax.swing.JOptionPane;

public class Projeto2 {

    private int[] numAleatorios = new int[1000],  mediaNumeros = new int[100];
    private int maior,  menor;
    private float media;

    public Projeto2() {
        inicializaMedia();
        geraNumerosAleatoris();
        achaMaior();
        achaMenor();
        acharMediaNmeros();
    }

    //apenas incializa o vetor
    private void inicializaMedia() {
        for (int i = 0; i < mediaNumeros.length; i++) {
            mediaNumeros[i] = 0;
        }
    }

    private void geraNumerosAleatoris() {
        for (int i = 0; i < numAleatorios.length; i++) {
            numAleatorios[i] = (int) (Math.random() * 100);//Adiciona um numero aleatório de 1 a 100

        }
    }

    //procura qual o maior numero dos 1000 gerados
    private void achaMaior() {
        maior = numAleatorios[0];
        for (int i = 1; i < numAleatorios.length; i++) {
            if (numAleatorios[i] > maior) {
                maior = numAleatorios[i];
            }
        }
    }

    //procura qual o menos numero dos 1000 gerados..
    private void achaMenor() {
        menor = numAleatorios[0];
        for (int i = 1; i < numAleatorios.length; i++) {
            if (numAleatorios[i] < menor) {
                menor = numAleatorios[i];
            }
        }
    }

    //calcula quantas veses o cada numero de 1 a 100 foi sorteado...
    private void acharMediaNmeros() {
        for (int i = 0; i < mediaNumeros.length; i++) {
            for (int j = 0; j < numAleatorios.length; j++) {
                if (numAleatorios[j] == (i + 1)) {
                    mediaNumeros[i]++;
                }
            }
        }
    }

    //retorna o maior valor
    public int getMaior() {
        return maior;
    }

    //retorna o menos valor
    public int getMenor() {
        return menor;
    }

    //retorna o vetor de quantidade de cada numero... cuidado, a posição 0 equivale a quantas veses o numero 1 saiu
    public int[] getMedias() {
        return this.mediaNumeros;
    }

    public static void main(String[] args) {
        //colouqe aqui as informações a serem apresentadas ao usuário..
        
    }
}

Recomendo depois vc desenvolver seu proprio codigo, para que vc memorize e aprenda!!

me de um retorno sobre esse codgoo...

abraço!!

R

Por enquanto ainda estou tentando fazer do meu jeito. So que ele roda blz, mas no final, na hora de dizer a media e o maior e o menor so sai o valor 100... sempre. Acho q nao estou conseguindo vizualizar...
Alguma ajuda?

preciso desemvolver mt mais.

// Fig. 7.7: Projeto2.java
//Gera numeros de 1 a 100, 1000 vezes.
import java.util.Random;

public class Projeto2
{
   public static void main( String args[] )
   {
      Random randomNumbers = new Random(); // gerador de número aleatório
      int frequency[] = new int[ 101 ]; // array de contadores de freqüência
	int maior=0;// armazena maior numero
	int menor=200;// armazena menor numero
	int media;// armazena a media dos numeros
	int soma=0;// armazena a soma
	int ext;
	int max = 0;
	int min = 0;
	
	
       // Roda 1000 vezes; 
      for ( int roll = 1; roll <= 1000; roll++ ) 
        
++frequency[ 1 + randomNumbers.nextInt( 100 ) ];

     for (int counter = 1; counter <= 100; counter++)  

  {          if  frequency[counter]> maior) 
               maior = frequency[counter];  
              max = counter;   
	 if (frequency[counter] < menor)
              menor = frequency[counter];  
               min =counter;   
	soma = soma + frequency[counter];
         
}

    System.out.printf( "%s%12s\n", "Numero", "Frequencia" );
         // gera saída do valor de cada elemento do array
      for ( int face = 1; face < frequency.length; face++ )
         System.out.printf( "%4d%12d\n", face, frequency[ face ] );
	media=soma/1000;
         System.out.printf( "                        media %5d \n ",   media );  // exibe  a media dos numeros
         System.out.printf( "                        maior %5d  \n",  max ); // exibe maior numero
         System.out.printf( "                        menor %5d  \n",  min ); // exibe menor numero


	
            } // fim de main
} // fim da classe Projeto1
B

Só de bater o olho te digo duas coisas:

1- depois desses ifs : “if (frequency[counter]> maior)”, “if (frequency[counter] < menor)”, abra um bloco de código e coloque ambas as instruções no if.
2- Que média você quer ?

Criado 24 de setembro de 2008
Ultima resposta 24 de set. de 2008
Respostas 8
Participantes 5