Winter sales Winter sales
Get up to 50 % extra points for free! More info

Discussion: Coloring a textbox with contain the maximum value of a two-dimensional array

Activities (4)
Avatar
Maria Rymar
Member
Avatar
Maria Rymar:11/20/2019 5:21

I have a two-dimensional array of random integers that are in an array of textboxes. I found the maximum and brought it to Label1. Everything works. But I still need to colour the textbox in which this maximum is located. I had versions, but unsuccessful. Please help, who knows where the error is?
int max = Convert.ToInt32(t[0, 0].Text);
for (i = 0; i < x; i++)
{

for (j = 0; j < y; j++)
{
if (Convert.ToIn­t32(t[i, j].Text) > max)
{
max = Convert.ToInt32(t[i, j].Text);
t[i, j].BackColor = Color.Red;
label1.Text = "" + max;
}
}
}

 
Reply
11/20/2019 5:21
Avatar
David Capka
ICT.social team
Avatar
Replies to Maria Rymar
David Capka:11/20/2019 8:20

Hi Maria, your code makes sense to me. Which line is causing the error and what's the error message?

Up Reply
11/20/2019 8:20
You can walk through a storm and feel the wind but you know you are not the wind.
Avatar
Maria Rymar
Member
Avatar
Replies to David Capka
Maria Rymar:11/20/2019 8:27

Hi! Look, there is no error, but the program works incorrectly. I want to find the Textbox with the maximum value and colour it. But the program colours 3 and more textboxes and i dont now why. I need only one coloured textbox with the max value.

 
Up Reply
11/20/2019 8:27
Avatar
David Capka
ICT.social team
Avatar
Replies to Maria Rymar
David Capka:11/22/2019 11:42

I see :) The problem is you color the TextBox every time you find a new maximal value. It takes multiple guesses to find the maximal value and you can be sure there is no larger value only when both loops finish.

You need to use 2 loops to find the maximal value and then 2 different loops to color every TextBox having this value (coz there can be more of them). Your code should look something like this:

// find the maximum
int max = Convert.ToInt32(t[0, 0].Text);
for (i = 0; i < x; i++)
    for (j = 0; j < y; j++)
        if (Convert.ToInt32(t[i, j].Text) > max)
            max = Convert.ToInt32(t[i, j].Text);

// write the maximum
label1.Text = max.ToString();

// color all cells with the maximum
for (i = 0; i < x; i++)
    for (j = 0; j < y; j++)
        if (Convert.ToInt32(t[i, j].Text) == max)
            t[i, j].BackColor = Color.Red;
Edited 11/22/2019 11:43
Up Reply
11/22/2019 11:42
You can walk through a storm and feel the wind but you know you are not the wind.
To maintain the quality of discussion, we only allow registered members to comment. Sign in. If you're new, Sign up, it's free.

4 messages from 4 displayed.