有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中创建类时遇到问题。有些方法不太确定

好的,这是我正在做的作业:

实现一个类Student(您可以使用为lab创建的类并将其添加到该类中)。除了该类已有的任何其他属性外,Student对象还将具有总测验分数。请确保编写一个完整的类(即正确的属性、构造函数、访问器和变体)

需要的其他方法有:addquick(int-score)、showStudentInfo()和getAverageScore()。注意,为了计算平均数,全班需要知道测验的数量。 driver/tester类将创建三(3)个student对象。每个学生对象的方法将被调用五次,以添加五(5)个测验分数

我建议您使用随机类来生成测验值,而不是硬编码它们。然后,驱动程序调用Student's method来显示学生的姓名、所有五个测验分数以及测验的平均分数。"

我有一个基本的想法,需要做什么,但我只是不确定的一些方法。例如,“getAverageScore”方法就是我遇到麻烦的方法。如果我只是在测试程序开始时初始化age name和major,我甚至需要get和set方法吗?非常感谢您对我的课堂上需要添加或修改的内容的任何帮助。以下是我目前掌握的代码:

import java.util.Random;

public class Student
{
  private int Age;
  private String Name;
  private String Major;
  private int Score;

  public Student(String n, int a, String m)
  {
    Name = n;
    Age = a;
    Major = m;
  }

  public String showStudentinfo()
  { return (Name + " " + Age + " " + Major + "\n");
  }

  public int addQuiz()
  { Score = randomNumbers.nextInt(101);
    return Score;
  }

  public int getAverageScore()
  { 
  }

  //setter methods
  public void setAge(int a)
  { Age = a;
  }
  public void setName(String n)
  { Name = n;
  }
  public void setMajor(String m)
  { Major = m;
  }

  //getter methods
  public int getAge()
  { return Age;
  }
  public String getName()
  { return Name;
  }
  public String getMajor()
  { return Major;
  }
}

共 (5) 个答案

  1. # 1 楼答案

    你需要把测验成绩存储在某个地方。你的教授说不止一个。在“Student”构造函数上方,添加大小为5的数组或ArrayList。我将为此使用数组,因此:

    private int[] scores = new int[5];
    

    然后在获取分数的方法中,使用循环将分数添加到数组中:

    public void addQuiz() { 
        for(int i = 0; i < 5; i++){ //Loops through and adds 5 scores
        int score = randomNumbers.nextInt(101);
        scores[i] = score;
        }
    }
    

    然后,您应该能够通过将分数相加并除以5来计算平均分数:

    public int getAverageScore() {
        int totalScore = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];
        int avgScore = totalScore / 5;
        return avgScore;
    }
    

    我还没有实际测试过这段代码,我自己也是一名初学者,但希望这能让您走上正确的道路。:)

  2. # 2 楼答案

    您必须保留所有分数和测验次数的总和,因此添加两个字段,sumOfQuizGradescountOfQuizGrades,并通过方法addquick将分数相加并增加计数

    顺便说一下,不要更改addquick的签名,它不能包含随机项,随机项应添加到主方法中

  3. # 3 楼答案

    字段应以小写字母开头。setter不是强制性的,它只是取决于它是否合理。Methodos AddQuize应该以int作为参数,并且应该有一个int numberOfQuizzes字段。该字段应在每次添加测验分数时递增。平均分数就是总分数除以测验次数

  4. # 4 楼答案

    为了使getAverageScore()起作用,您需要跟踪个人分数。您可以使用ArrayList<Integer>这样的方法,并向其中添加个人分数。(或者,您可以保留一个avgScore属性和一个numOfTests属性,并根据该属性计算新的平均值——尽管如果您希望将平均值作为int,这可能会随着时间的推移变得更加不准确)

    这里是依赖于ArrayList<Integer>的解决方案的部分。这里我假设您的方法签名是正确的,并且您实际上不想返回doublefloat(即,您必须向上/向下取整分数)

    public int getAverageScore() {
        float sum = 0.0; // so rounding works, integer division truncates
        // in case you're not familiar with it,
        // read the following line as "for each score in scoreList"
        for (Integer score : scoreList) { // scoreList is of type ArrayList<Integer>
           sum = sum + score;
        }
        return Math.round(sum / scoreList.size());
    }
    

    现在,我不向您展示如何正确地实现scoreList,因为这是一个家庭作业,您仍然应该自己做一些。提示:您不能在ArrayList中使用基元类型(如int),而是需要存储Integer。您可以使用new Integer(int value)创建特定值的整数。相反,如果您知道将有固定数量的分数,则可以使用int数组

    要使此解决方案工作,您需要添加scoreList属性,并且需要更改addQuiz()的工作方式

  5. # 5 楼答案

    大部分看起来不错,但也有一些问题,主要与风格有关(可能有点主观)

    1)您不会在任何地方初始化随机数

    2)变量名称应以小写字母开头。大写的名称通常为类保留

    3)不要使用单字母变量名,即使是参数。它们是令人讨厌的模糊信息。使用诸如setAge(intnewage)之类的信息量更大的工具

    4)听起来他们想让你存储所有考试分数的总和(这很奇怪,但是嘿),然后计算平均值。要从一个总和中得到平均值,你需要知道总和中包含了多少个测试,所以你必须在某个地方跟踪它,并相应地增加它。在AddQuike中,您现在只需跟踪最近一次测验的分数

    5)不要在{的同一行上启动函数体,这很难看