Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida num Foreach - C#

Tenho o seguinte exercicio:

Desenvolva uma rotina que receba um parâmetro inteiro numérico, e retorne um booleano indicando se o valor do parâmetro existe ou não na matriz {2, 5, 6, 8, 9}.

Desenvolvi o código abaixo, onde estou errando? :S

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Simulado2
{
    public partial class frmMatriz : Form
    {
        public frmMatriz()
        {
            InitializeComponent();
        }

        private void btnConferir_Click(object sender, EventArgs e)
        {
            int valor = Convert.ToInt32(txtNum.Text);

            int [] myArray = { 2, 5, 6, 8, 9 };

            foreach (int num in myArray)
            {
            if (valor == num)
            {
                MessageBox.Show("O valor está na matriz");
            }
            else
            {
                MessageBox.Show("O valor não está na matriz");
            }
            }
        }
    }
}
4 respostas

Seu código parece certo, só falta retornar o booleano

o que nao está funcionando? a variável txtNum ele está encontrando?

Na verdade ele faz a verificação correta sim.

O problema é o seguinte:. Eu digito no Textbox o número para ele verificar (a verificação ele faz certinho, e a mensagem é exibida num messagebox, o problema é nessa mensagem que é exibida, para que ela finalize eu tenho que ficar clicando em ok 5x, sendo que eu deveria clicar só uma vez em ok e o programa finalizar, isso acontece independente de o número estar ou não na matriz). Alguma sugestão de como resolver? Será que essa condição tem que estar dentro do foreach mesmo?

solução!

Entendi!

Entao voce tem de fazer o break para ele sair do for:

  bool acertou = false;
  foreach (int num in myArray)
   {
            if (valor == num)
            {
                MessageBox.Show("O valor está na matriz");
                acertou = true;
                break;
            }
   }

Ai, em vez de fazer o else, voce verificar se acertou == false depois que o for terminar. Ha outras formas de fazer tambem.

Deu certo! fiz da forma abaixo e deu certo! Muito obrigado Professor!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Simulado2
{
    public partial class frmMatriz : Form
    {
        public frmMatriz()
        {
            InitializeComponent();
        }

        private void btnConferir_Click(object sender, EventArgs e)
        {
            int valor = Convert.ToInt32(txtNum.Text);

            int [] myArray = { 2, 5, 6, 8, 9 };

            bool acertou = false;
            foreach (int num in myArray)
            {
                if (valor == num)
                {
                    MessageBox.Show("O valor está na matriz");
                    acertou = true;
                    break;
                }
                else
                {
                    MessageBox.Show("O valor não está na matriz");
                    break;
                }
            }
        }
    }
}