Подтвердить что ты не робот

Java - Что это просит меня сделать?

Это следующим образом:

Я выделил ту часть, которую я не понимаю. Что именно это означает, когда он просит меня сделать эти методы только двумя параметрами? Похоже, вам понадобится 3, которые являются тестовыми баллами для каждого соответствующего теста?

Код, который у меня есть до сих пор:

public class Student {

private String ID;
private double test1;
private double test2;
private double test3;
private double average;

public Student(String sID, double sTest1, double sTest2, double sTest3, double sAverage)
{
    ID = sID;
    test1 = sTest1;
    test2 = sTest2;
    test3 = sTest3;
    average = sAverage;
}

public Student(String sID)
{
    ID = sID;
}

public void setTestScore(double sTest1, double sTest2, double sTest3)
{

}

public void getTestScore(double sTest1, double sTest2, double sTest3)
{

}

public double calcAverage()
{
    average = (test1 + test2 + test3) / 3;
    return average;
}

public void displayInfo(String ID, double test1, double test2, double test3, double average)
{
    System.out.println("Student ID: " + ID);
    System.out.println("Test 1 Score: " + test1);
    System.out.println("Test 2 Score: " + test2);
    System.out.println("Test 3 Score: " + test3);
    System.out.println("Average test score: " + average);
}
}

Любое понимание того, что он ожидает от меня с методами getTestScore и setTestScore, будет оценено.

Edit: Похоже, решение состоит в том, чтобы просто использовать массив для хранения значений? Я думал, что это победит цель его структурирования, но, похоже, как новичок мои варианты немного ограничены.

4b9b3361

Ответ 1

Что именно означает, когда он просит меня сделать эти методы только двумя параметрами? Похоже, вам понадобится 3, которые являются тестовыми баллами для каждого соответствующего теста?

Это будет один из способов сделать это, но они хотят сделать это несколько иначе.

Они хотят иметь метод, который устанавливает оценку только для одного теста.

Это, вероятно, лучше, чем

  • легко адаптируется к большему количеству тестов

  • позволяет устанавливать оценки по одному (так как вы еще не знаете других оценок).

Поэтому параметр "extra" указывает, какой тест вы здесь говорите.

Чтобы установить все три показателя, вы будете называть этот метод три раза (с разными параметрами).

Ответ 2

Сеттер должен иметь 2 параметра: номер теста и оценка

public void setTestScore(int testNo, double score) {
  //YOUR HOMEWORK
}

Getter должен вернуть оценку для тестового номера

public double getTestScore(int testNo) {
  return YOUR_HOMEWORK;
}

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

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

С массивами

У вас может быть какой-то способ инициализации, чтобы указать, сколько тестов должно быть. Давайте на мгновение вспомним double[] scores = new double[3]; как переменную-член в вашем классе. Установка третьего теста на score будет такой же простой, как scores[2] = score;. Получение результата первого теста просто scores[0];

Ответ 3

Метод набора не должен принимать сразу все 3 счета. Он должен принимать один параметр оценки и второй параметр (int, значение которого составляет от 1 до 3), чтобы указать, какая оценка теста должна быть обновлена.

Аналогично метод get должен принимать номер теста (от 1 до 3) и возвращать соответствующий балл.

Ответ 4

Первый метод должен добавить тест и оценку в коллекцию, скажем, HashMap<Integer, Double>. Вот так:

public void addScore(int testId, double score) {
    myTestsMap.put(testId, score);
}

Вторая часть должна получить оценку с карты, например:

public double getScoreForTest(int testId) {
    if(myTestsMap.containsKey(testId){
        return myTestsMap.get(testId);
    } else {
        return -1;
    }
}

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

myTestsMap = new HashMap<Integer, Double>;

Что касается теоретического фона:

два метода - это так называемые getter и setter. Это хорошая практика, чтобы ваши поля классов были приватными и разрешали доступ только с помощью таких методов. Он позволяет анализировать входящие и исходящие данные, между прочим.

Карта - это структура данных, которая отображает набор уникальных ключей для неидеальных значений. HashMap является одной из реализаций карты.

Ответ 5

Другой вариант, не упомянутый здесь, состоит в том, чтобы удерживать ваши тестовые оценки в ArrayList:

public class Student {
    private String ID;
    private ArrayList<Double> testScores = new ArrayList<>();

    //CONSTRUCTOR

    public void setTestScore(int testNumber, double score) {
        //YOUR HOMEWORK
    }

    public double getTestScore(int testNumber) {
        //YOUR HOMEWORK
    }

Теперь вы можете добавить свои тестовые баллы, и они могут быть позиционными на основе индекса в списке. Обратите внимание, что ArrayList также основано на 0, поэтому вам придется исправить это. Этот подход также дает вам дополнительное преимущество, заключающееся в том, что вы можете проходить через тестовые баллы и распечатывать их в правильном порядке.

Ответ 6

Что именно означает, когда он просит меня сделать эти методы только двумя параметрами? Похоже, вам понадобится 3, которые являются тестовыми баллами для каждого соответствующего теста?

Попробуйте подумать о том, что должен делать метод, а не о том, как вы это сделаете. Имя метода - это предложение - setTestScore. Это указывает на то, что я хочу установить оценку для одного теста.

Теперь я бы спросил, какая информация мне потребуется, чтобы изменить оценку для одного теста? Мне нужно что-то, что идентифицирует индивидуальный тест. Например, целое число 0 для теста 1, целое число 1 для теста 2 и т.д. Мне также нужен фактический результат теста, чтобы я мог его сохранить. Теперь я знаю, что мне, вероятно, нужны два параметра: один для тестового идентификатора и один для теста.

Итак, теперь мне нужен способ хранения теста в определенном месте с использованием идентификатора. Учитывая, что у меня есть идентификатор, который является целым числом, следует надеяться, что я хочу использовать массив. Причина, по которой я выбрал массив, состоит в том, что он принимает целое число и позволяет мне получать доступ к данным в этом месте в массиве.

Раздел псевдокода, чтобы выделить то, что я предложил выше:

setTestScore ( parameter1 testIdentifier, parameter2 testScore )
ArrayOfTestScores[testIdentifier] = testScore

Примечание относительно вашего второго вопроса

Похоже, вам понадобится 3, которые являются тестовыми баллами для каждого соответствующий тест?

Если кто-то отправил вам следующую информацию в электронном письме, и попросил вас сохранить/обновить значение для студенческого теста на листе excel:

  • no value
  • 65,7
  • no value

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

Тест 2: 65,7

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

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

Ответ 7

Объект-ученик должен иметь поле Map<Integer, Double>, которое хранит номер теста в качестве ключа и оценку, полученную им в этом тесте, в качестве значения. Метод set будет put(testNumber, score), и метод get вернет тестовый результат get(testNumber);

Может показаться, что запутанным является требование предоставить конструктор, который задает все поля? Возможно, вы ожидаете, что подпись метода конструктора будет выглядеть так же, как метод setTestScore?

Если вам все еще нужна помощь, попробуйте подумать о том, о чем идет речь. Вы узнаете о коллекциях?

Ответ 8

В идеале вы хотели бы, чтобы все объектно-ориентированное, это означало бы, что сами Тест будут их собственным классом.

Я думаю, что ожидается, что первое значение - это номер теста (от 1 до 3), а второе значение - это фактическое значение. Таким образом, подпись метода у вас неправильная. Он должен иметь только два параметра. Первый - это число, а второе - оценка.

Что происходит после вызова сеттера?

Ну... вам нужно решить, какая структура хранит эти данные. Это в основном три пары данных. Как я уже упоминал ранее, было бы неплохо иметь класс Test, но достаточно простой структуры данных. Я дам вам подсказку о структуре данных: она должна быть основанной на значении/ценности. Ключ - это идентификатор теста, а значение - значение теста. Прочитайте о коллекциях java, чтобы узнать, есть ли какая-либо структура данных, которая может помочь вам в этом.

Ответ 9

Я думаю, вы должны создать какую-либо карту с идентификатором теста в качестве ключа, а оценка - как значение.

Ваш сеттер заполнит карту с помощью оценки для текущего идентификатора теста.

Ваш получатель получит оценку на карте, соответствующую запрошенному идентификатору теста.

Ответ 10

Что именно это означает, когда он просит меня сделать эти методы принимать только два параметра? Кажется, вам понадобится 3, которые контрольные баллы для каждого соответствующего теста?

метод должен принимать тестовый идентификатор и тестовый счет и устанавливать данные в соответствующий атрибут,

public void setTestScore(int testNumber, double testScore)
{
if(testNumber == 1)
      test1=testScore;
else if(testNumber == 2)
      test2=testScore;
else if(testNumber == 3)
      test3=testScore;
}

и метод get должен принимать 1 параметр (testNumber)

public double getTestScore(int testNumber){
if(testNumber == 1)
      return test1;
else if(testNumber == 2)
      return test2;
else if(testNumber == 3)
      return test3;
}