Java - 这要求我做什么?

时间:2015-12-01 08:32:43

标签: 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);
}
}

我们将非常感谢您对getTestScoresetTestScore方法的期望。

编辑:看起来解决方案就是使用数组来存储值?我认为这会破坏以这种方式构建它的目的,但似乎作为初学者,我的选择有点受限。

10 个答案:

答案 0 :(得分:26)

  

当它要求我让这些方法只接受两个参数时,它究竟意味着什么?看起来你需要3个,这是各个测试的测试分数吗?

这将是一种方法,但他们希望以不同的方式做到这一点。

他们希望有一种方法只为单次测试设置分数。

这可能更好,因为它

  1. 可以轻松适应更多的测试

  2. 允许逐个设置分数(因为您可能还不知道其他分数)。

  3. 所以“extra”参数指定了你在这里谈论的测试。

    要设置所有三个分数,您可以将此方法调用三次(使用不同的参数)。

答案 1 :(得分:15)

Setter应该有2个参数:测试编号和分数

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

Getter应该返回测试编号的分数

public double getTestScore(int testNo) {
  return YOUR_HOMEWORK;
}
在这种情况下,

你的作业是想一个好的数据结构来保存一些测试的结果(目前是三个)并在以后检索它们。

提示:正如其他人已经建议的那样,您可能会想到映射键值(您的测试号码)到数值(您的分数)的数据结构。这些结构中最基本的是一个数组,其中索引是你的关键(注意:从零开始!)和得分是该指数的值......

使用数组

您仍然可以通过某种方式初始化来指定测试的数量。让我们暂时将double[] scores = new double[3];视为您班级中的成员变量。将第3个测试设置为score就像scores[2] = score;一样简单。获得第一个测试的结果只是scores[0];

答案 2 :(得分:11)

set方法不应该同时接受所有3个分数。它应该接受单个得分参数和第二个参数(int值在1到3之间)以指示应该更新哪个测试分数。

同样,get方法应接受测试编号(1到3之间)并返回相应的分数。

答案 3 :(得分:8)

第一种方法应该为集合添加测试和分数,比如说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 是Map的实现之一。

答案 4 :(得分: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的,因此您必须对此进行更正。这种方法还为您提供了额外的好处,即能够迭代测试分数并以正确的顺序打印出来。

答案 5 :(得分:2)

  

当它要求我让这些方法只接受两个参数时,它究竟意味着什么?看起来你需要3个,这是各个测试的测试分数吗?

尝试考虑该方法应该做什么,而不是考虑如何去做。 该方法的名称是赠品 - setTestScore。 这对我来说,我想为一次测试设定分数。

现在,我会问自己,我需要哪些信息才能更改单个测试的分数? 我需要一些能够识别个人测试的东西。例如,测试1的整数0,测试2的整数1等。 我还需要实际的测试分数,以便我可以存储它。 现在我知道我可能需要两个参数,一个用于测试标识符,另一个用于测试分数。

现在,我需要一种方法,使用标识符将测试分数存储在特定位置。 鉴于我有一个整数的标识符,我希望很明显我想使用一个数组。 我选择数组的原因是因为它接受一个整数,并允许我访问数组中该位置的数据。

一段伪代码,用以突出我上面提出的建议:

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

关于第二个问题的说明

  

看起来你需要3,这是每个的测试分数   各自的测试?

如果有人在电子邮件中向您发送了以下信息, 并要求您在Excel工作表中存储/更新学生考试的价值:

  • 没有价值
  • 65.7
  • 没有价值

当然,您可以立即看到您需要更新学生的第二次测试。 但是,有更好的方法吗? 那个人只给我发送测试号和分数怎么样?

测试2:65.7

似乎更容易,因为我有一个更新测试的实际标识符。 我也不需要电子邮件中的冗余信息。

当开始编程时,它可以帮助尝试将问题转化为您可能希望与之相关的真实示例。它可以帮助您理解什么是有意义的,什么不是。最终,随着问题变得棘手,您可能需要学习一些解决问题的正式方法。但是对于这个例子,做一个简单的现实生活等同于你正在做的事情可以帮助。

答案 6 :(得分:2)

学生对象应该有一个Map<Integer, Double>字段,用于存储测试编号作为密钥,以及他们在该测试中获得的分数作为值。 set方法将put(testNumber, score),get方法将返回get(testNumber);

的测试分数

似乎令人困惑的是要求提供一个设置所有字段的构造函数?也许您希望构造函数方法签名看起来就像setTestScore方法一样?

如果您仍然需要帮助,请尝试考虑一下该课程的内容。你在学习收藏吗?

答案 7 :(得分:1)

理想情况下,您希望将所有内容都面向对象,这意味着Test本身就是他们自己的类。

我认为预期的是第一个值是测试的数量(1到3),第二个值是实际值。所以你拥有的方法签名是错误的。它应该只有两个参数。第一个是数字,第二个是分数。

调用setter后会发生什么?

嗯......你必须决定存储这些数据的一些结构。它基本上是三对数据。就像我之前提到的那样,拥有一个Test类会很好,但是一个简单的数据结构就足够了。我会给你一个关于数据结构的提示:它应该是基于键/值的。键是Test的id,值是测试的值。阅读有关Java集合的内容,看看是否有任何类型的数据结构可以帮助您解决这个问题。

答案 8 :(得分:0)

我认为你应该创建一种某种类型的Map,将测试ID作为键,将得分作为值。

您的setter会使用当前测试ID的分数填充地图。

您的getter将检索地图中的分数,对应于询问的测试ID。

答案 9 :(得分:-5)

  

当它要求我制作这些方法时,它究竟意味着什么   只接受两个参数?好像你需要3,这是   每个测试的测试成绩?

该方法应接受test-id和test-score,并将数据设置为适当的属性

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