To fazendo um exercício da mega sena que precisava gerar uma matriz [3000][6] com 3000 mil linhas e seis colunas com números aleatórios e dai ordenei ela em ordem crescente e coloquei um vetor para mostrar o numero de linhas. Agora preciso mostrar quantas vezes cada numero saiu na matriz pro exemplo: 10 saiu 500 vezes, 58 saiu 200 vezes em ordem crescente, mostrar as 20 duplas que mais saíram tipo 12 e 2 saíram 100 vezes; e os 20 números que mais saíram em ordem crescente.
Alguém pode ajudar? não to conseguindo, ja tentei de muitas formas e até agora nada!
Segue o código abaixo:
import java.util.Random;
public class Teste {
public static void main(String[] args) {
int m [][] = new int [3000][6];
int v[] = new int[65];
int num=0;
Random gerador = new Random ();
for (int i=0; i < 3000 ; i++)
{
for(int j = 1 ; j <= 60 ; j++)
v[j] = 0;
int j = 0;
while(j < 6)
{
int aux = gerador.nextInt(60) + 1;
if(v[aux] == 0){
m[i][j++] = aux;
v[aux] = 1;
}
}
}
for(int k = 0 ; k < 3000 ; k++){
for(int i = 0 ; i < 6 ; i++){
for(int j = i ; j > 0 ; j--){
if(m[k][j] < m[k][j - 1]){
int aux = m[k][j];
m[k][j] = m[k][j - 1];
m[k][j - 1] = aux;
}
}
}
}
for (int i=0; i < 3000; i++)
{
System.out.print("Sorteio ["+(i+1)+"]: ");
for (int j=0; j < 6; j++)
System.out.printf("%d ", m[i][j]);
System.out.print("\n");
}
//tentando contar os numeros da matriz
for(int i=0; i<m.length; i++)
{
int cont=0;
for(int j=0; j<m.length; j++)
{
if (m[i][0] == m[0][j])
cont++;
num = m[i][0];
}
System.out.println(" repeticoes numero " + num + ": " + cont + " vezes");
}
A forma ideal de contar repeticoes é vc isar um Map numero -> numero onde a chave é o nunero e o valor é o nunero de repetições.
Mas se vc não pode/quer usar estruturas de dados mais adequadas vc pode improvisar.
Por exemplo se o range de dados é conhecido e pequeno ( 0 a 9 por exemplo ) vc pode usar um array com o número sendo o indice e o valor sendo a quantidade.
/* agora compila */
int qtdes[] = new int[10];
int values[] = new int[]{1,1,1,2,2,9};
for(int i : values){ qtdes[i]++; }
for(int i = 0; i < qtdes.length; i++){
if(qtdes[i] > 0) System.out.println(i + " aparece " + qtdes[i]);
}
Agora se ao inves de 9 vc tiver todos os inteiros positivos ( Integer.MAX_INT ) ainda assim da pra fazer.
Porém para tipos numéricos maiores vc pode nao ter memória suficiente. Se bem que hoje em dia quem nao tem uns gigas de ram? Testa ate ter um OutOfMemory
Vou tentar, eu mudei algumas coisas no seu codigo mas não funcionou, poderia ajudar? para ele contar quantas vezes o numero aparece nessa matriz, de numeros aleatorios. Sendo que os numeros da matriz só podem ir até 65, a matriz possui 3000 mil linhas e 6 colunas.
//tentando contar os numeros da matriz
int qtdes[] = new int[65];
int values[] = new int[]{1,1,1,2,2,9};
for(int i : values){ qtdes[i]++; }
for(int i = 0; i < qtdes.length;){
int matriz[3000][6] = ...
for(int i = 0; i< 3000; i++){
for(int j = 0; j< 3000; i++){
int numero = matriz[i][j]; /* certo ?*/
qtdes[ numero ] ++;
}
}
/* faz um for em todos os elementos de qtdes e mostra na tela ue*/
Preciso continuar esse código, com a mesma matriz[3000][6] agora preciso mostrar os dezessete números que mais saíram no sorteio; e as duplas que mais saíram.
Os dezessete números que mais saíram é…
As dezessete duplas que mais saíram por exemplo “o 2 e 49 saíram 1000 vezes”…alguém ainda pode ajudar?
para responder precisamos saber: cara vc manja de ordenação?
pq vc quer basicamente ordenar uma coleção de dados sob um criterio.
existe uma forma facil de fazer isso usando o Collections.sort – vc poderia criar uma classe Ocorrencia que contem valor e quantidade ( de vezes que brotou ). faz essa classe implementar Comparable e estuda como isso pode ser usado pra ordenar pela quantidade. ai vc ordena e pega os 17 primeiros elementos.
agora as duplas… mano… ta ai um bom problema. resolve o primeiro que isso talvez lhe de subsidio para o segundo e ai vc cria uma outra pergunta especifica