none
Array num2 não repetir numero do Array num1 c# RRS feed

  • Pergunta

  • eu tenho 3 array NUM1, NUM2 e NUM3,

    o array NUM1 eu recebe 3 numero digitados entre 1 a 25,

    o array NUM2 recebem um Random de 12 números aleatórios entre 1 e 25,

    o array NUM3 recebe os 15 números gerados pelo array NUM1 e NUM2,

    até ai tudo certo, funcionando de boa, o que eu preciso é que ao digitar os 3 números no array NUM1 o array NUM2 não repita estes números ao gerar os 12 aleatório.

    alguém consegue me ajudar nesta questão? fico muito agradecido, pontuarei a resposta...

    parte do codigo, (bagunçado)

     private Label[] EntradaLabel = new Label[12];
            private Label[] EntradaText = new Label[3];
            private Label[] ResultadoLabel = new Label[15];
            int[] Resultado = new int[15];
            int sorteado;
    
            public FrmJogo()
            {
                InitializeComponent();
                GeraControles();
                //Gerador();
            }
    
            private Label[] GeraControlesAuxiliar(int tamLbl, int esquerda, int topo, BorderStyle BS)
            {
                Label[] RetornoLabel = new Label[tamLbl];
    
                for (int i = 0; i < tamLbl; i++)
                {
                    RetornoLabel[i] = new Label
                    {
                        Name = "label" + i
                    };
    
                    RetornoLabel[i].Text = RetornoLabel[i].Name;
                    RetornoLabel[i].Left = esquerda; //Defina a posição do controle no formulário
                    RetornoLabel[i].Top = topo;
                    RetornoLabel[i].Font = new Font("", 15, FontStyle.Bold);
                    RetornoLabel[i].BorderStyle = BS;
    
                    this.Controls.Add(RetornoLabel[i]); // Adicione os controle ao formulário
                    topo += (RetornoLabel[i].Height + 5);
                }
    
                return RetornoLabel;
            }
            private void GeraControles()
            {
                int i, esquerda = 435, topo = 480;
    
                for (i = 0; i < 12; i++)
                {
                    EntradaLabel[i] = new Label();
                    //EntradaLabel[i].Name = "" + i;
                    //EntradaLabel[i].Text = EntradaLabel[i].Name;                
                    EntradaLabel[i].Left = esquerda; //Defina a posição do controle no formulário
                    EntradaLabel[i].Top = topo;
                    EntradaLabel[i].Size = new Size(40, 25);
                    EntradaLabel[i].Font = new Font("", 15, FontStyle.Bold);
                    EntradaLabel[i].BorderStyle = BorderStyle.FixedSingle;
                    this.Controls.Add(EntradaLabel[i]); // Adicione os controle ao formulário
                    esquerda += (EntradaLabel[i].Width + 5);
                }
    
                esquerda = 700;
                topo = 430;
                for (i = 0; i < 3; i++)
                {
                    EntradaText[i] = new Label();
                    //EntradaText[i].Name = " " + i;
                    //EntradaText[i].Text = EntradaText[i].Name;
                    EntradaText[i].Left = esquerda;
                    EntradaText[i].Top = topo;
                    EntradaText[i].Size = new Size(50, 25);
                    EntradaText[i].Font = new Font("", 15, FontStyle.Bold);
                    EntradaText[i].BackColor = Color.WhiteSmoke;
                    EntradaText[i].BorderStyle = BorderStyle.Fixed3D;
                    this.Controls.Add(EntradaText[i]);
                    esquerda += EntradaText[i].Width + 5;
                }
    
                esquerda = 150;
                topo = 550;
                for (i = 0; i < 15; i++)
                {
                    ResultadoLabel[i] = new Label();
                    //ResultadoLabel[i].Name = "label" + i;
                    //ResultadoLabel[i].Text = ResultadoLabel[i].Name;
                    //ResultadoLabel[i].Anchor = AnchorStyles.Right;
                    //ResultadoLabel[i].Location = new Point(ResultadoLabel[i].Location.X + 20, ResultadoLabel[i].Location.Y + 300);
                    ResultadoLabel[i].Left = esquerda;
                    ResultadoLabel[i].Top = topo;
                    ResultadoLabel[i].BackColor = Color.Gray;
                    ResultadoLabel[i].ForeColor = Color.White;
                    ResultadoLabel[i].Size = new Size(50, 35);
                    ResultadoLabel[i].Font = new Font("", 20, FontStyle.Bold);
                    //ResultadoLabel[i].BorderStyle = BorderStyle.FixedSingle;
                    this.Controls.Add(ResultadoLabel[i]);
                    esquerda += (ResultadoLabel[i].Width + 5);
    
                }
            }
            private void MostraResultado()
            {
                int i, ii = 0;
                int[] numerosOrganizados = new int[15];
                try
                {               
                    for (i = 0; i < 12; i++)                  
                        numerosOrganizados[i] = Convert.ToInt32(EntradaLabel[i].Text);    
                    for (; i < 15; i++)
                        numerosOrganizados[i] = Convert.ToInt32(EntradaText[ii++].Text);                
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show("Crie a Sequencia aleatória!");
                }
                Array.Sort(numerosOrganizados);
                
                for (int y = 0; y < 15; y++)
                {                             
                    ResultadoLabel[y].Text = numerosOrganizados[y].ToString();
                }
                 
            }
    
            private void Gerador()
            {
                int resultado = 1;
                Aleatorios ale = new Aleatorios();
    
                int[] numerosSorteados = ale.GeradorNaoRepetidoss(12, 1, 25);
    
                Array.Sort(numerosSorteados);
                
                Control[] controles = EntradaLabel;
               
                for (int i = 0; i < controles.Length; i++)
                {                
                    int valor = numerosSorteados[i];
                    controles[i].Text = valor + "";               
                }          
    
            }
    
     private void btnGerarSequencial_Click(object sender, EventArgs e)
            {
    
                if (EntradaText[0].Text == "" | EntradaText[1].Text == "" | EntradaText[2].Text == "")
                {
                    MessageBox.Show("Por favor, escolha os tres numeros Fixos", "Adevertencia", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    MostraResultado();
                    
    
                }
            }


    Titodj7

    domingo, 12 de setembro de 2021 12:58

Todas as Respostas

  • Meu post não apareceu no forum?

    Titodj7

    terça-feira, 14 de setembro de 2021 01:00
  • Você pode usar o except para comparar os arrays usando linq

    var result = arrayOne.Select((r, i) => new {Value = r, Index = i})
        .Except(arrayTwo.Select((r, i) => new {Value = r, Index = i}))
        .Select(t => t.Value);

    Espero ter ajudado


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    terça-feira, 14 de setembro de 2021 15:51
  • Você pode usar o except para comparar os arrays usando linq

    var result = arrayOne.Select((r, i) => new {Value = r, Index = i})
        .Except(arrayTwo.Select((r, i) => new {Value = r, Index = i}))
        .Select(t => t.Value);

    Espero ter ajudado


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    não consegui com teu código, eu precisaria fazer uma comparação (se o EntradaLabel (criada Dinamicamente com 3 label) tiver algum numero digitados na posição 0, 1, e 2,  então o numerosSorteados não sortearia estes numeros, pois jã estão escolhidos.

    ai vem o problema, eu não sei como fazer isso, não sei se no gerador do for,

     private void Gerador()
            {
                int x = 0;
                Aleatorios ale = new Aleatorios();
                int[] numerosSorteados = ale.GeradorNaoRepetidoss (12,1,25);
                
                Array.Sort(numerosSorteados);
                //Control[] controles = EntradaLabel;
                
                for (int i = 0; i < EntradaLabel.Length; i++)
                    {            
                      int  valor = numerosSorteados[i];
                        EntradaLabel[i].Text = valor + "";                
                }
            }
            
    ou na class Aleatórios
    public class Aleatorios
        {
    
            int[] numeros;
            private Random _random;
            public Aleatorios()
            {
                this._random = new Random();
            }
            //generates random numbers
            public int GeradorAleatorio(int min, int max)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
                return this._random.Next(min, max + 1);
            }
            public int[] GeradorAleatorios(int longetud, int min, int max)
            {
                if (longetud <= 0)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                for (int i = 0; i < numeros.Length; i++)
                {
                    numeros[i] = GeradorAleatorio(min, max);
                }
                return numeros;
            }
            //generates non-repeating random numbers
            public int[] GeradorNaoRepetidoss(int longetud, int min, int max /*Label[] NumJaEscolhidos*/)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
    
    
                if (longetud <= 0 || (max - min) < longetud - 1)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                bool repetido;
                int numero;
                int indice = 0;
                //int indiceX = NumJaEscolhidos.Length;
                while (indice < numeros.Length)
                {
                    repetido = false;
                    numero = GeradorAleatorio(min, max);
    
                    for (int i = 0; i < indice; i++)
                    {
                        if (numeros[i] == numero)
                        {
                            repetido = true;
                        }
                    }
                    //for (int x = 0; x < indiceX; x++)
                    //{
                    //    if (Convert.ToInt32(NumJaEscolhidos[x].Text) == numero)
                    //    {
                    //        repetido = true;
                    //        break;
                    //    }
                    //}
                    if (!repetido)
                    {
                        numeros[indice] = numero;
                        indice++;
                    }
                }
    
                return numeros;
            }
    }
    se alguem me der uma luz, fico muito agradecido, um abraço.


    Titodj7


    • Editado Titodj7 domingo, 19 de setembro de 2021 23:26
    domingo, 19 de setembro de 2021 23:01