Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Miguel Correia

Ver se existe elementos repetidos e imprimir-los

Recommended Posts

Miguel Correia

Boas gente , estou a fazer um exercicio para avaliação em JAva , e o exercicio é fazer o euro milhoes .

Ja está quase tudo feito so me falta comparar os elementos jogados pelo utilizador e os random gerados.

Peguei nos elementos todos so numeros e juntei-os num array e agora queria ver se ha repetidos . Depois fazia igual para as estrelas .

Envio em baixo o codigo .

public static int[] compara () {
Scanner ler = new Scanner(System.in);
int[] lista = apostaUtilizador(); //
int[] rand = euro_M(); // numeros Random
int[] total = new int[10];
for(int i= 0; i < 5;i++){
out.print(lista);
}
for(int j=0; j < 5; j++){
out.print(rand[j]);
}
System.arraycopy(lista,0,total,4,4);
System.arraycopy(rand,0,total,4,4);


return total;

Edited by brunoais
geshi

Share this post


Link to post
Share on other sites
HappyHippyHippo

deixa ver se esta frase te acende uma luz:

para todos elementos da chave, tens de verificar se o número existe em tobos os elementos escolhidos pelo utilizador


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

copiar ? eu usei essa palavra ? de onde tiraste essa ideia ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
brunoais

copiar ? eu usei essa palavra ? de onde tiraste essa ideia ?

Não é contigo (repara no username ;))


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Miguel Correia

Copia os numeros todos para um array e ve se ha repetidos nesse array.

Nao fez luz, podia explicar melhor sff?

Edited by Miguel Correia

Share this post


Link to post
Share on other sites
HappyHippyHippo

Copia os numeros todos para um array e ve se ha repetidos nesse array.

isso não faz sentido porque como não existe alteração de informação, a necessidade de cópia de valores é irrelevante

Nao fez luz, podia explicar melhor sff?

infelizmente não, isto porque (apesar de ter escrito todos com um 'b') a frase diz claramente o que tens de fazer, e é contra os meus princípios apresentar a solução a quem não apresentou um modelo/algoritmo correcto de solução, demonstrando que o problema não é conhecimento do processo mas sim de implementação.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia

Sim , nao estou a pedir a solução , so quero que me explica melhor o que tenho de fazer. Só isso . O objectivo do forum não é dar soluções ;)

Share this post


Link to post
Share on other sites
HappyHippyHippo

está é a frase que te apresentei:

CICLO            - para todos elementos da chave
COMPARAÇÃO DE    - tens de verificar se
ELEMENTO ITERADO - o número existe em
CICLO            - todos os elementos escolhidos pelo utilizador 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia

ja tentei varias maneiras e nao tou a ver como fazer, isto nao funciona , mas so consegui isto . O que estou a fazer mal?

int[] lista = apostaUtilizador();
int[] rand = euro_M();

int cn=0;
int ce=0;

for(int i=0; i < rand.length-2;i++){
 for(int j=0;j<lista.length-2;j++){
	 if (rand[i] == lista[j]) cn++;
 }
}
out.print("Acertou " + cn +" Numero(s) e acertou " + ce + " Estrelas");
return lista;

}

Edited by Miguel Correia

Share this post


Link to post
Share on other sites
Miguel Correia

Porque so quero calcular os numeros primeiro e depois as Estrelas . o contador de estrela so esta la para nao me esquecer. Ainda nao calculei

Edited by Miguel Correia

Share this post


Link to post
Share on other sites
HappyHippyHippo

Porque so quero calcular os numeros primeiro e depois as Estrelas . o contador de estrela so esta la para nao me esquecer. Ainda nao calculei

agora responde à primeira pergunta


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia

porque se o array tem dimensao 6 (0..6) = 7 , tiro duas posiçoes e fica 5 para os numeros e depois comparo as estrelas

Edited by Miguel Correia

Share this post


Link to post
Share on other sites
HappyHippyHippo

e a posição do último índice não tem direito a ser comparada ?

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia

mesmo assim não funciona.

Ja funcionou , o erro tava na função aposta do utilizador

Share this post


Link to post
Share on other sites
HappyHippyHippo

como sabes que não funciona ?

apresenta o código que tens agora


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia
import java.lang.Object;
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.System.out;
import java.util.Random;
public class F2ex9
{ 
  /**Funçao que lê a aposta do Utilizador, numeros*/
   public static int [] apostaUtilizadorN (){
  Scanner ler = new Scanner(System.in); // lê atraves do teclado
  int i;
  int[] fim = new int[6];                  // definir o tamanho do array final

  out.println("Introduza os numeros pretendidos :"); // Printf

  for(i=0; i < 5{// NUMEROS
    int leArray = ler.nextInt();           // scanf
    boolean testa = procuraArray(leArray,fim);// testa se os numeros pertencem ao array

    if (leArray >=1 && leArray <=50 && testa) {
       fim = leArray;
       i++;
   } // se o numero pertençer a sua gama de valores
    else out.println("!!!Numero invalido , introduza outro numero!!!");
   }

   Arrays.sort(fim);//ordena os numeros
   return fim;  // chave ordenada num unico array
 }
 /** aposta do utilizador , estrelas */
 public static int [] apostaUtilizadorE(){
   Scanner ler = new Scanner(System.in);
   int[] estrelas = new int[2];

   out.println("Introduza agora as estrelas pretendias :");
   for(int i=0;i<2{// ESTRELAS
      int e = ler.nextInt();
      boolean testaEstrela = procuraArray(e,estrelas);// testa se as estrelas pertencem ao array

      if(e >=1 && e <=9 && testaEstrela) {
       estrelas = e;
       i++;
       }
       else out.println("!!!Insira outra estrela , numero invalido!!!");
   }
   Arrays.sort(estrelas);
   return estrelas;
   }

 /** Funçao que testa se nao existe elementos repetidos */
 public static boolean procuraArray(int n, int[] nu_es){
    boolean nrepetidos = true;

    for(int ind = 0;ind <= nu_es.length-1;ind++){
     if(nrepetidos){ // se nao é repetidos
           if(nu_es[ind] == n) {
        nrepetidos = false;
       }
      }
   }
    return nrepetidos;
   }
  /** Funçao que calcula os numeros random */
 public static int [] randN (){

   int i;
   int[] fim = new int[6]; // definir o tamanho do array final

   out.println("========== Numeros Sorteados =========="); // Printf

   for(i=0; i < 5{// NUMEROS
     int numeros = sorteia(); // scanf
     boolean testaNumeros = procuraArray(numeros,fim);// testa se os numeros pertencem ao array

     if (numeros >=1 && numeros <=50 && testaNumeros) {
       out.println(numeros);
       fim = numeros;
       i++;
     } // se o numero pertençer a sua gama de valores

    }
   Arrays.sort(fim);//ordena os numeros


   return fim;  // chave ordenada num unico array
   }
   /** Funçao que calcula as estrelas random */
   public static int[] randE(){
   int[] estrelas = new int[2];
   out.println("********** Estrelas Sorteadas **********:");
   for(int i=0;i<2{// ESTRELAS
      int e = sorteia();
      boolean testaEstrela = procuraArray(e,estrelas);// testa se as estrelas pertencem ao array

      if(e >=1 && e <=9 && testaEstrela) {
       out.println(e);
       estrelas = e;
       i++;
       }

   }
   Arrays.sort(estrelas);//ordena os numeros
   return estrelas;  // chave ordenada num unico array
 }
 public static void compara(int[] nU, int[] nR, int[] eU, int[] eR) {
   out.println("========== Numeros em que acertou ==========");

   for(int i = 0; i < nU.length; i++){

    for(int j = 0; j< nR.length; j++) {
       if (nU==nR[j]) out.println(nU);


          }

       }

   out.println("********** Estrelas em que acertou **********");

   for(int i = 0; i < eU.length; i++){

    for(int j = 0; j< eR.length; j++) {
       if (eU==eR[j]) out.println(eU);


                }

       }
 }

 public static int sorteia () {

   Random r = new Random ();
   final int H = 50;
   final int L = 1;
   return (int) (r.nextDouble () * (H-L)) + L;
   }

 public static void main (String [] args){


    int[] nU = apostaUtilizadorN();
    int[] eU = apostaUtilizadorE();
    int[] nR = randN();
    int[] eR = randE();
    compara(nU,eU,nR,eR);

   }
}

Edited by brunoais
geshi

Share this post


Link to post
Share on other sites
LuisMendes330

public class F2ex9

Não te dá erro nesta linha?

Edited by brunoais
geshi

Share this post


Link to post
Share on other sites
HappyHippyHippo

esse código está relativamente ... fraquinho ...

aqui tens uma boa base para trabalhares e implementares a verificação

(se tiveres dois dedos de testa, verás que o que tens de fazer é bem simples)

import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;

public class Main
{
 /* quantidades de numeros e estrelas a serem sorteados(as) */
 public static final int CHAVE_QUANT_NUMEROS = 5;
 public static final int CHAVE_QUANT_ESTRELAS = 2;

 /* domínio de números a serem sorteados */
 public static final int DOMINIO_NUMEROS_MIN = 1;
 public static final int DOMINIO_NUMEROS_MAX = 50;

 /* domínio de estrelas a serem sorteadas */
 public static final int DOMINIO_ESTRELAS_MIN = 1;
 public static final int DOMINIO_ESTRELAS_MAX = 9;

 public static void main(String[] args)
 {
   /* listas com números e estrelas que o jogador seleccionou */
   int[] numeros = new int[CHAVE_QUANT_NUMEROS];
   int[] estrelas = new int[CHAVE_QUANT_ESTRELAS];

   /* listas com números e estrelas que o computador escolhei ao acaso */
   int[] lottery_numeros = new int[CHAVE_QUANT_NUMEROS];
   int[] lottery_estrelas = new int[CHAVE_QUANT_ESTRELAS];

   /* pedir os números e estrelas ao jogador */
   request(numeros, estrelas);

   /* escolher os números e estrelas */
   lottery(lottery_numeros, lottery_estrelas);
 }

 protected static void output(int[] numeros, int[] estrelas)
 {
   /* ciclo de apresentação dos números */
   for (int indice = 0; indice < CHAVE_QUANT_NUMEROS; indice++)
   {
     /* verificação se é o início da apresentação ou o meio */
     if (indice == 0)
     {
       System.out.print("Números [ ");
     }
     else
     {
       System.out.print(", ");
     }

     /* apresentar o número somente se for válido */
     if (numeros[indice] != DOMINIO_NUMEROS_MIN - 1)
     {
       System.out.print(numeros[indice]);
     }
   }
   System.out.print("]");

   /* ciclo de apresentação das estrelas */
   for (int indice = 0; indice < CHAVE_QUANT_ESTRELAS; indice++)
   {
     /* verificação se é o início da apresentação ou o meio */
     if (indice == 0)
     {
       System.out.print(" Estrelas [ ");
     }
     else
     {
       System.out.print(", ");
     }

     /* apresentar a estrela somente se for válida */
     if (estrelas[indice] != DOMINIO_ESTRELAS_MIN - 1)
     {
       System.out.print(estrelas[indice]);
     }
   }
   System.out.print("]");
 }

 protected static void request(int[] numeros, int[] estrelas)
 {
   int indice, valor;
   Scanner scanner = new Scanner(System.in);

   /* preencher as listas com valores inválidos menores que o menor valor do domínio
    * isto é importante para manter a ordenação da lista */
   Arrays.fill(numeros, DOMINIO_NUMEROS_MIN - 1);
   Arrays.fill(estrelas, DOMINIO_ESTRELAS_MIN - 1);

   /* ciclo de inserção de números */
   indice = 0;
   do
   {
     /* pedir o número ao jogador */
     System.out.print("Insira o " + (indice + 1) + "o número (MIN = " + DOMINIO_NUMEROS_MIN + ", MAX = " + DOMINIO_NUMEROS_MAX + ") : ");
     if (scanner.hasNextInt())
     {
       valor = scanner.nextInt();

       /* verificar se faz parte do domínio de números */
       if (valor < DOMINIO_NUMEROS_MIN || valor > DOMINIO_NUMEROS_MAX)
       {
         System.out.println("Valor inválido : " + valor);
       }
       else
       {
         /* verificar se já se encontra registado */
         if (Arrays.binarySearch(numeros, valor) > 0)
         {
           System.out.println("Número já registado : " + valor);
         }
         else
         {
           /* inserir o valor na lista de números registados mantendo a ordenação */
           numeros[CHAVE_QUANT_NUMEROS - indice - 1] = valor;
           Arrays.sort(numeros);
           indice++;

           /* apresentar chave seleccionada */
           System.out.print("O número (" + valor + ") foi registado com sucesso : ");
           output(numeros, estrelas);
           System.out.println();
         }
       }

       /* limpar o buffer de leitura */
       scanner.nextLine();
     }
     else
     {
       System.out.println("Valor inválido : " + scanner.next());
     }
   } while (indice < CHAVE_QUANT_NUMEROS);

   /* ciclo de inserção de estrelas */
   indice = 0;
   do
   {
     /* pedir a estrela ao jogador */
     System.out.print("Insira a " + (indice + 1) + "a estrela (MIN = " + DOMINIO_ESTRELAS_MIN + ", MAX = " + DOMINIO_ESTRELAS_MAX + ") : ");
     if (scanner.hasNextInt())
     {
      valor = scanner.nextInt();

       /* verificar se faz parte do domínio de estrelas */
       if (valor < DOMINIO_ESTRELAS_MIN || valor > DOMINIO_ESTRELAS_MAX)
       {
         System.out.println("Valor inválido : " + valor);
       }
       else
       {
         /* verificar se já se encontra registada */
         if (Arrays.binarySearch(estrelas, valor) > 0)
         {
           System.out.println("Estrela já registada : " + valor);
         }
         else
         {
           /* inserir o valor na lista de estrelas registadas mantendo a ordenação */
           estrelas[CHAVE_QUANT_ESTRELAS - indice - 1] = valor;
           Arrays.sort(estrelas);
           indice++;

           /* apresentar chave seleccionada */
           System.out.print("A estrela (" + valor + ") foi registada com sucesso : ");
           output(numeros, estrelas);
           System.out.println();
         }
       }

       /* limpar o buffer de leitura */
       scanner.nextLine();
     }
     else
     {
       System.out.println("Valor inválido : " + scanner.next());
     }
   } while (indice < CHAVE_QUANT_ESTRELAS);

   scanner.close();
 }

 protected static void lottery(int[] numeros, int[] estrelas)
 {
   int[] tombola_numeros = new int[DOMINIO_NUMEROS_MAX - DOMINIO_NUMEROS_MIN + 1];
   int[] tombola_estrelas = new int[DOMINIO_ESTRELAS_MAX - DOMINIO_ESTRELAS_MIN + 1];

   /* preencher a tombola com os valores do domínio dos números */
   for (int indice = 0; indice < tombola_numeros.length; indice++)
   {
     tombola_numeros[indice] = DOMINIO_NUMEROS_MIN + indice;
   }
   /* baralhar a tombola */
   shuffle(tombola_numeros);

   /* preencher a tombola com os valores do domínio das estrelas */
   for (int indice = 0; indice < tombola_estrelas.length; indice++)
   {
     tombola_estrelas[indice] = DOMINIO_ESTRELAS_MIN + indice;
   }
   /* baralhar a tombola */
   shuffle(tombola_estrelas);

   /* escolher os números e as estrelas */
   numeros = Arrays.copyOf(tombola_numeros, CHAVE_QUANT_NUMEROS);
   estrelas = Arrays.copyOf(tombola_estrelas, CHAVE_QUANT_ESTRELAS);
 }

 protected static void shuffle(int[] array)
 {
   Random random = new Random();

   /* ciclo de "baralhação" */
   for (int indice = 0; indice < array.length - 1; indice++)
   {
     /* escolher um número aleatório da secção da lista ainda não alterada */
     int swap = random.nextInt(array.length - indice) + indice;

     /* inserir o elemento selecionado na secção de elementos baralhados */
     int aux = array[indice];
     array[indice] = array[swap];
     array[swap] = aux;
   }
 }
}

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
LuisMendes330

Também tenho de fazer um exercício idêntico.

Não tou a perceber aqui esta parte:

protected static void lottery(int[] numeros, int[] estrelas)
{
int[] tombola_numeros = new int[DOMINIO_NUMEROS_MAX - DOMINIO_NUMEROS_MIN + 1];
int[] tombola_estrelas = new int[DOMINIO_ESTRELAS_MAX - DOMINIO_ESTRELAS_MIN + 1];

/* preencher a tombola com os valores do domínio dos números */
for (int indice = 0; indice < tombola_numeros.length; indice++)
{
    tombola_numeros[indice] = DOMINIO_NUMEROS_MIN + indice;
}
/* baralhar a tombola */
shuffle(tombola_numeros);

Está completo aqui o código?

Edited by brunoais
geshi

Share this post


Link to post
Share on other sites
HappyHippyHippo

Está completo aqui o código?

claro que não ... está o suficiente para que faças o que perguntas no primeiro post


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.