Java-这是要我做什么?
内容如下: 我强调了我不理解的部分。当它要求我让这些方法只接受两个参数时,这到底意味着什么?看起来你需要3分,每个测试的分数是多少 到目前为止,我掌握的代码是:Java-这是要我做什么?,java,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
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
方法的期望,我将不胜感激
编辑:看起来解决方案只是使用数组来存储值?我原以为这会破坏这样构建它的目的,但作为初学者,我的选择似乎有点有限。设置方法不应该同时接受所有3个分数。它应该接受单个分数参数和第二个参数(int,其值介于1到3之间),以指示应该更新哪个测试分数 同样,get方法应该接受测试编号(介于1和3之间)并返回相应的分数 当它要求我让这些方法只接受两个参数时,这到底意味着什么?看起来你需要3分,每个测试的分数是多少 这可能是一种方法,但他们想做的略有不同 他们希望有一种只为一次测试设置分数的方法 这样可能更好
要设置所有三个分数,您需要调用此方法三次(使用不同的参数)。Setter应该有两个参数:测试编号和分数
public void setTestScore(int testNo, double score) {
//YOUR HOMEWORK
}
Getter应该返回测试编号的分数
public double getTestScore(int testNo) {
return YOUR_HOMEWORK;
}
在本例中,您的任务是考虑一个良好的数据结构,以保存大量测试(目前有三个)的结果,并在以后检索它们
提示:正如其他人所建议的,您可能会想到一种数据结构,将关键值(您的测试编号)映射到值(您的分数)。这些结构中最基本的是一个数组,其中索引是您的键(注意:从零开始!),分数是该索引的值
带有数组
您仍然可以使用某种初始化方法来指定要进行多少测试。让我们想一想double[]分数=新的double[3]
作为类中的成员变量。将第三个测试设置为score
,简单到scores[2]=score代码>。第一次测试的结果就是分数[0]代码>
当它要求我制作这些方法时,它到底意味着什么
只接受两个参数?看起来你需要3个,它们是
每个测试的分数是多少
该方法应接受测试id和测试分数,并将数据设置为适当的属性
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)
我认为您应该创建某种映射,以测试ID为键,以分数为值
您的setter将使用当前测试ID的分数填充映射
您的getter将在映射中检索对应于所请求的测试ID的分数。理想情况下,您希望所有内容都面向对象,这意味着测试本身将是他们自己的类
我认为预期的是,第一个值是测试的编号(1到3),第二个值是实际值。因此,您拥有的方法签名是错误的。它应该只有两个参数。第一个是数字,第二个是分数
调用setter后会发生什么
嗯。。。您必须决定存储该数据的某种结构。它基本上是三对数据。正如我前面提到的,拥有一个测试类是很好的,但是一个简单的数据结构就足够了。我将给您一个关于数据结构的提示:它应该是基于键/值的。键是测试的id,值是测试的值。阅读java集合,看看是否有任何类型的数据结构可以帮助您完成这项工作。第一种方法应该向集合添加测试和分数,比如说HashMap
。像这样:
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>;
myTestsMap=newhashmap;
关于理论背景:
这两种方法是所谓的getter和setter。保持类字段的私有性并只允许通过此类方法进行访问是一种很好的做法。它允许您分析输入和输出数据,以及其他内容
Map是一种将一组唯一键映射到非唯一值的数据结构HashMap是Map的实现之一。这里没有提到的另一个选项是将您的考试分数保存在数组列表中:
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
}
公共班级学生{
私有字符串ID;
private ArrayList testScores=new ArrayList();
//建造师
公共void setTestScore(int testNumber,双倍分数){
//你的家庭作业
}
公共双getTestScore(int testNumber){
//你的家庭作业
}
现在,您可以添加测试分数,并且它们可以基于列表中的索引进行定位。请注意,ArrayList
也是基于0的,因此您必须对此进行更正。这种方法还为您提供了一个额外的好处,即可以迭代测试分数并以正确的顺序打印出来
当它要求我让这些方法只接受两个参数时,这到底意味着什么?看起来你
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
}
setTestScore ( parameter1 testIdentifier, parameter2 testScore )
ArrayOfTestScores[testIdentifier] = testScore