Click here to Skip to main content
15,908,115 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
C#
using System;
using System.Collections.Generic;
using System.Text;

namespace pluralclass2
{
   public class Book
    {

        public Book(string name) 
            //adding constructer parameters require anyone who invokes uses
            //_-this constructer will have to pass a name
            // cotructer must h ave same name as a class
        {
            grades = new List<double>(); //initialized the field named grades
            Name = name;
        }

        

        public void AddGrade(double grade) //void dont return value
        {
            grades.Add(grade);
        }

        public Stats GetStats()
        {
            var result = new Stats();
            result.Avg = 0.0;
            double result.High = double.MinValue;
            double result.Low = double.MaxValue;

            foreach (double grade in grades)
            {
                result.High = Math.Max(grade, result.High);
                result.Low = Math.Min(grade, result.Low);
                result.Avg += grade;
            }
            result.Avg /= grades.Count;
            Console.WriteLine($" The lowest grade is {result.Low} ");
            Console.WriteLine($" The highest grade is {result.High} ");
            Console.WriteLine($"The average grade is {result.Avg:N1}");
        }

        private List<double> grades; 
        public string Name;      
                               
                                
    }
}


What I have tried:

double result.High = double.MinValue;
double result.Low = double.MaxValue;
error on result low and high , error i believe is saying im initializing it more than once within scope but ive tried for this and it just doesnt make sense
Posted
Updated 6-Aug-19 6:44am
v2
Comments
Richard MacCutchan 6-Aug-19 5:09am    
"error i believe is saying"
It does not matter what you believe, or think, you need to show us the exact error message, and point out the line on which it occurs.

Where is the definition of the Stats class?

double result.High = double.MinValue;


You only prefix something with a type ("double" above) if you are defining a variable for the first time. "result.High" already exists, it is the "High" property of the object "result", and the Stats class defines what type "High" is so it already knows it is a double (you haven't posted the Stats class so I am assuming you have properly defined it).

As you are setting a value and not defining a variable you don't need the type

result.High = double.MinValue;


In future if you get an error message always paste what the message is, they are there to help diagnose and often contain important information.
 
Share this answer
 
To add to what F-ES Sitecore says, this isn't debugging.
This is just getting the syntax right so the compiler will accept it and let you run your program - a bit like using a spell checker in an email verifies that every word is in English, so you didn't write it in German for example!

Debugging is the process that comes after a successful compilation, and it involves making the code do what you expected - in the email example, it's making sure that the message you wanted to send comes across to the reader, rather than a totally different meaning!

Debugging is the time consuming one, because compiling correctly does not mean your code is right! :laugh:

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
 
Your method Stats GetStats() promises to return an instance of 'Stats: you create one named 'result, but, you never return it. This should not compile with an error message flagging the absence of the 'return.

I am puzzled by your using a Class named 'Book which contains a collection of "grades." Students have grades, not Books ?
 
Share this answer
 

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