Click here to Skip to main content
15,887,027 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
hello guys
i have problem with get the biggest number in a list (c#)

i dont know why this function can not work properly !
"maxvalue" should give me only one number that is biggest in the list
but the result is many numbers!

What I have tried:

C#
foreach (CircleF circle in circles)
 {

   CvInvoke.Circle(frame, Point.Round(circle.Center), (int)circle.Radius, new Bgr(Color.White).MCvScalar, 1);

 List<int> num = new List<int>();

   for (int j = 0; j < 10; j++)
        {
           num.Add(Point.Round(circle.Center).Y);
           int maxValue = num.Max();
           Console.WriteLine(maxValue);
         }

  }
Posted
Updated 18-Jun-23 23:12pm
Comments
payam mohammadi 19-Jun-23 5:04am    
this code is for an app that it will find ball on the video by (EMGU CV) then it will draw a circle on found ball ,
then this part of code that i wrote here , it can find coordinate of lowest part of circle
with this part of code i want to find where is the lowest place in video that circle is going down (The place where the ball hits the ground)
Tim the Gamer 19-Jun-23 13:11pm    
Hey you can minus the radius from the center to find the bottom most part of the ball

You are trying to get the maximum value in the list while still updating the list. Initialize the list you are adding values to outside the loop

C#
List<int> num = new List<int>();
foreach (CircleF circle in circles)
 {

   CvInvoke.Circle(frame, Point.Round(circle.Center), (int)circle.Radius, new Bgr(Color.White).MCvScalar, 1);

 

   for (int j = 0; j < 10; j++)
        {
           num.Add(Point.Round(circle. Center).Y);
        }

  }
//get the maximum value now

 int maxValue = num.Max();
 Console.WriteLine(maxValue)
 
Share this answer
 
Comments
payam mohammadi 19-Jun-23 4:56am    
i already did it ! but i changed it with your code , but it doesnt work yet! result is many numbers again!!!
this code is for an app that it will find ball on the video by (EMGU CV) then it will draw a circle on found ball ,
then this part of code that i wrote here , it can find coordinate of lowest part of circle
with this part of code i want to find where is the lowest place in video that circle is going down (The place where the ball hits the ground)
Richard MacCutchan 19-Jun-23 5:12am    
Oops- deleted.
CPallini 19-Jun-23 5:14am    
5.
Tim the Gamer 19-Jun-23 13:07pm    
did you also post to stack overflow? i saw a similar post there
I have a whole range of questions but that aside, you are getting multiple values because the Console.WriteLine(maxValue) line is inside the for loop which is itself inside another for loop - is this what you intended? So you will get a line written to the console 10 times for every cirleF in circles.

Other than that the code will add the same value (Point.Round(circle.Center).Y to the List object 10 times for each cirleF in circles so that doesn't make much sense. I suspect you need two separate for loops rather than two nested for loops or perhaps just one for loop?

The following code will only give you one value. I have assumed that you have hard coded the number 10 in the second for loop because you know there are 10 circleF objects in cirles. I am not familiar with Emgu CV so I can't guarantee the sytax of what is below.

C#
List<int> num = new List<int>();
foreach (CircleF circle in circles)
{
    CvInvoke.Circle(frame, Point.Round(circle.Center), (int)circle.Radius, new Bgr(Color.White).MCvScalar, 1);
    num.Add(Point.Round(circle.Center).Y);
}

Console.WriteLine(num.Max());
 
Share this answer
 
Comments
payam mohammadi 19-Jun-23 5:11am    
thanks , i remove the "for" loop but nothing change
To add to what Tim the gamer has - rightly - said ...

Compiling does not mean your code is right! :laugh:
Think of the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - not that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:
C#
private int Double(int value)
   {
   return value * value;
   }

Once you have an idea what might be going wrong, start using the debugger to find out why. Put a breakpoint on the first line of the method, and run your app. When it reaches the breakpoint, the debugger will stop, and hand control over to you. You can now run your code line-by-line (called "single stepping") and look at (or even change) variable contents as necessary (heck, you can even change the code and try again if you need to).
Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?
Hopefully, that should help you locate which part of that code has a problem, and what the problem is.
This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!
 
Share this answer
 
Comments
payam mohammadi 19-Jun-23 4:59am    
thanks , but it is too high to read
OriginalGriff 19-Jun-23 5:26am    
Do you want to try that comment again, as it doesn't make a lot of sense in English ...
payam mohammadi 19-Jun-23 5:49am    
thanks , i dont know who closed my question! it is not kind
OriginalGriff 19-Jun-23 5:58am    
Your question is still there ... it's publicly available.

Your post as a "solution" has been closed by the community as it was deemed "not an answer" - which was correct, it wasn't!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900