我需要帮助创建一个平均方法。我完成了其他一切。它需要计算并返回所有学生的平均考试成绩。我只有return语句。我在提出实际方法时遇到了麻烦。到目前为止,这是我的代码。第一个是Course课程,第二个是Student课程。
public class Course
{
private String course;
private Student s1, s2, s3, s4, s5;
private int studentcount = 0;
public Course (String name)
{
course = name;
}
public Student addStudent(String first, String last, Address home, Address school)
{
if (studentcount == 0){
s1 = new Student(first,last,home,school);
studentcount++;
return s1;
}
if (studentcount == 1) {
s2 = new Student(first,last,home,school);
studentcount++;
return s2;
}
else if (studentcount == 2){
s3 = new Student(first,last,home,school);
studentcount++;
return s3;
}
else if (studentcount == 3){
s4 = new Student(first,last,home,school);
studentcount++;
return s4;
}
else if (studentcount == 4) {
s5 = new Student(first,last,home,school);
studentcount++;
return s5;
}
else { //the course can only have five students
System.out.println("No More students allowed in the class");
return null;
}
}
public double average() //returns the average
{
return (s1.average() + s1.average() + s1.average() + s1.average() + s1.average()) / 5.0;
}
public String roll() //returns student info for each number of students
{
String results = "";
if (studentcount == 1){
results += s1.toString () +"n";
return results;
}
if (studentcount == 2) {
results += s1.toString () +"n";
results += s2.toString () +"n";
return results;
}
else if (studentcount == 3){
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
return results;
}
else if (studentcount == 4){
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
results += s4.toString () +"n";
return results;
}
else if (studentcount == 5) {
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
results += s4.toString () +"n";
results += s5.toString () +"n";
return results;
}
else{
return null;
}
}
}
public class Student
{
private String firstName, lastName;
private Address homeAddress, schoolAddress;
private int test1, test2, test3;
//-----------------------------------------------------------------
// Sets up this Student object with the specified initial values.
//-----------------------------------------------------------------
public Student (String first, String last, Address home, Address school)
{
firstName = first;
lastName = last;
homeAddress = home;
schoolAddress = school;
test1 = 0;
test2 = 0;
test3 = 0;
}
//-----------------------------------------------------------------
// Returns this Student object as a string.
//-----------------------------------------------------------------
public String toString()
{
String result;
result = firstName + " " + lastName + "\n";
result += "Home Address:\n" + homeAddress + "\n";
result += "School Address:\n" + schoolAddress;
return result;
}
public void setTestScore(int t, int g) //sets the test score
{
if (t == 1)
{
test1 = g;
}
else if (t == 2)
{
test2 = g;
}
else if (t == 3)
{
test3 = g;
}
}
public int getTestScore (int t) //returns the test score
{
if (t == 1)
{
return test1;
}
else if (t == 2)
{
return test2;
}
else
{
return test3;
}
}
}
答案 0 :(得分:1)
我不认为这样的练习应该给初学者。它(将在这里可以看到)诱使他们产生令人厌烦和烦人的重复代码。已经开发了编程语言以使编程变得容易,而不是颈部疼痛。
OTOH,我们在这里有限制的问题(没有数组)可以被看作是制定战略的动机,没有“禁止”功能。但话说回来,我想知道编程的介绍是否应该在这个早期阶段深入研究这些细节。那就是说,我提出改写班级学生。见评论。
//禁止使用数组和列表。
public class Course {
private String course;
private Student s1, s2, s3, s4, s5;
private int studentcount = 0;
public Course (String name) {
course = name;
}
方法addStudent使用“移动”已存储学生的简单技巧,为s1
的下一位学生腾出空间。虽然不必要地复制了一些空值,但是重复测试并不是更昂贵,而且肯定不那么容易出错。
public Student addStudent(String first, String last, String home, String school){
if( studentcount < 5 ){
studentcount++;
s5 = s4; s4 = s3; s3 = s2; s2 = s1;
return s1 = new Student(first,last,home,school);
}
System.out.println("No more students allowed in the class");
return null;
}
方法卷使用另一种标准技巧来避免重复行。必须为所有大于1的学生计数提供s1
的数据,必须打印s2
所有大于2的计数,等等。应该避免重复扩展字符串,因此StringBuilder。
public String roll(){
StringBuilder sb = new StringBuilder();
if (studentcount >= 1) sb.append( s1.toString() ).append( "\n" );
if (studentcount >= 2) sb.append( s2.toString() ).append( "\n" );
if (studentcount >= 3) sb.append( s3.toString() ).append( "\n" );
if (studentcount >= 4) sb.append( s4.toString() ).append( "\n" );
if (studentcount >= 5) sb.append( s5.toString() ).append( "\n" );
return sb.toString();
}
average
方法使用相同的技术,现在累积分数。请注意,为了计算商,转换为double。
public double average(){
int scores = 0;
if (studentcount >= 1)
scores += s1.getTestScore(1) + s1.getTestScore(2) + s1.getTestScore(3);
if (studentcount >= 2)
scores += s2.getTestScore(1) + s2.getTestScore(2) + s2.getTestScore(3);
if (studentcount >= 3)
scores += s3.getTestScore(1) + s3.getTestScore(2) + s3.getTestScore(3);
if (studentcount >= 4)
scores += s4.getTestScore(1) + s4.getTestScore(2) + s4.getTestScore(3);
if (studentcount >= 5)
scores += s5.getTestScore(1) + s5.getTestScore(2) + s5.getTestScore(3);
return (double)scores/(studentcount*3);
}
}