chiefa laquiefa Ответов: 3

Не могу отладить это для моей жизни, 2 недели в программировании, так что не плачь меня, ха-ха


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;      
                               
                                
    }
}


Что я уже пробовал:

двойной результат.Высокий = двойной.Параметр minvalue;
двойной результат.Низкий = двойной.Максвеллову;
ошибка на результат низкий и высокий , ошибка, Я считаю, говорит о том, что я инициализирую его более одного раза в пределах области видимости, но я пробовал для этого, и это просто не имеет смысла

Richard MacCutchan

"я считаю, что ошибка говорит"
Не имеет значения, во что вы верите или думаете, вам нужно показать нам точное сообщение об ошибке и указать линию, на которой оно происходит.

Где находится определение класса статистики?

3 Ответов

Рейтинг:
2

F-ES Sitecore

double result.High = double.MinValue;


Вы только префиксируете что-то с типом ("double" выше), если вы определяете переменную в первый раз. "результат.High" уже существует, это свойство "High" объекта "result", и класс Stats определяет, какой тип "High", поэтому он уже знает, что это double (вы не опубликовали класс Stats, поэтому я предполагаю, что вы правильно его определили).

Поскольку вы устанавливаете значение, а не определяете переменную, вам не нужен тип

result.High = double.MinValue;


В будущем, если вы получите сообщение об ошибке, всегда вставляйте то, что это сообщение, они там, чтобы помочь диагностировать и часто содержат важную информацию.


Рейтинг:
1

OriginalGriff

Чтобы добавить к тому, что говорит F-ES Sitecore, это не отладка.
Это просто правильный синтаксис, чтобы компилятор принял его и позволил вам запустить вашу программу - немного похоже на то, как использование проверки орфографии в электронном письме проверяет, что каждое слово написано на английском языке, поэтому вы не написали его на немецком, например!

Отладка - это процесс, который происходит после успешной компиляции, и он включает в себя выполнение кода так, как вы ожидали-в Примере с электронной почтой он гарантирует, что сообщение, которое вы хотели отправить, попадет к читателю, а не совсем другое значение!

Отладка занимает много времени, потому что правильная компиляция не означает, что ваш код правильный! :смеяться:

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
0

BillWoodruff

Ваш метод Stats GetStats() обещает вернуть экземпляр 'Stats: you create one named 'result, но вы никогда не возвращаете его. Это не должно компилироваться с сообщением об ошибке, помечающим отсутствие 'return.

Я озадачен тем, что вы используете класс под названием "Книга, которая содержит коллекцию" оценок." У студентов есть оценки, а не книги ?