如何在多类包的主要方法中使用属性?

How to work with attributes in a main method of a multiclass package?

我是新手。我正在编写一个程序,该程序使用以下信息来计算许多学生的成绩,但我从一开始就卡住了。我在一个包中使用不同的 classes,我只是不知道如何在 main 方法中将它们放在一起。我在写“FirstName = oScan.nextLine();”时收到此消息 "non-static variable FirstName cannot be referenced from a static context Error."在最后几行。我的问题是如何在我的主要方法中使用下面的这些属性 名 姓 作业大道 测验大道 项目大道 测试大道 期末成绩 字母等级

我是否编写了正确的构造函数、getter 和 setter?

/* 这是第一个class,父class */

package student;

public class Person {



 protected String FirstName, LastName;

    //Constructor
    public Person(String FirstName, String LastName) {
        this.FirstName = FirstName;
        this.LastName = LastName;
    }

    //Getters
 public String getFirstName() {
        return FirstName;
    }

    public String getLastName() {
        return LastName;
    }
    //Setters
    public void setFirstName(String FirstName) {
        this.FirstName = FirstName;
    }

     public void setLastName(String LastName) {
        this.LastName = LastName;
    }


}

这是第二个class

package student;

import java.util.ArrayList;
import java.util.Scanner;


public class Student extends Person{
    private int HomeworkAve, QuizAve, ProjectAve, TestAve; 
    private double FinalGrade;
    private String LetterGrade;

//Constructor for the averages
    public Student(int HomeworkAve, int QuizAve, int ProjectAve, int TestAve, String FirstName, String LastName) 
    {
        super(FirstName, LastName);
        this.HomeworkAve = HomeworkAve;
        this.QuizAve = QuizAve;
        this.ProjectAve = ProjectAve;
        this.TestAve = TestAve;

    }

    //Method to calculate final grade and letter grade
    //Final grade calculation
    public double CalcGrade (int HomeworkAve, int QuizAve, int ProjectAve, int TestAve)
    {
FinalGrade = (double)(0.15*HomeworkAve + 0.05*QuizAve + 0.4 * ProjectAve + 0.4*TestAve);
return FinalGrade;
    }

    //Letter grade calculation
    public String CalcGrade ( double FinalGrade)
    {
        if ( FinalGrade >= 90.00)
        LetterGrade="A";
    else if(FinalGrade >= 80.00)
        LetterGrade="B";
    else if(FinalGrade>=70.00)
        LetterGrade="C";
    else if(FinalGrade>=60.00)
        LetterGrade="D";
    else LetterGrade="F";

        return LetterGrade;
    }



    public Student(int HomeworkAve, int QuizAve, int ProjectAve, int TestAve, double FinalGrade, String LetterGrade, String FirstName, String LastName) {
        super(FirstName, LastName);
        this.HomeworkAve = HomeworkAve;
        this.QuizAve = QuizAve;
        this.ProjectAve = ProjectAve;
        this.TestAve = TestAve;
        this.FinalGrade = FinalGrade;
        this.LetterGrade = LetterGrade;
    }


    //Setters for this student class
    public void setHomeworkAve(int HomeworkAve) {
        this.HomeworkAve = HomeworkAve;
    }

    public void setQuizAve(int QuizAve) {
        this.QuizAve = QuizAve;
    }

    public void setProjectAve(int ProjectAve) {
        this.ProjectAve = ProjectAve;
    }

    public void setTestAve(int TestAve) {
        this.TestAve = TestAve;
    }

    public void setFinalGrade(int FinalGrade) {
        this.FinalGrade = FinalGrade;
    }

    public void setLetterGrade(String LetterGrade) {
        this.LetterGrade = LetterGrade;
    }


    //Getters for this student class
    public int getHomeworkAve() {
        return HomeworkAve;
    }

    public int getQuizAve() {
        return QuizAve;
    }

    public int getProjectAve() {
        return ProjectAve;
    }

    public int getTestAve() {
        return TestAve;
    }

    public double getFinalGrade() {
        return FinalGrade;
    }

    public String getLetterGrade() {
        return LetterGrade;
    }


   public static void main(String[] args){
    Scanner oScan = new Scanner(System.in);
    Scanner iScan = new Scanner(System.in);

   ArrayList<Student> students = new ArrayList<>();



   System.out.println("Enter the number of students");

   int numberOfStudents = iScan.nextInt();

    for(int iCount = 0;iCount < numberOfStudents;){

    System.out.println("Enter the name for Student " + ++iCount);
    System.out.println("Enter First Name");
    String FirstName = oScan.nextLine();
    System.out.println();

    System.out.println("Enter Last Name");
    String LastName = oScan.nextLine();
     System.out.println();

    System.out.println("Enter Homework Average");
    int HomeworkAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Quiz Average");
    int QuizAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Project Average");
    int ProjectAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Test Average");
    int TestAve = iScan.nextInt();
    System.out.println();
    double Fin;



 Student hobbit = new Student(HomeworkAve,QuizAve, ProjectAve,TestAve,FirstName, LastName);
    students.add(hobbit);
  }
}
}

您需要创建 class 的实例才能访问非静态 methods/variables。

这意味着:

Person p = new Person("First Name Here", "Last Name");

这是低效的,所以你应该做的是,

public static void main(String[] args){
   ArrayList<Student> students = new ArrayList<Student>();
   Scanner oScan = new Scanner(System.in);
   System.out.println("Enter the number of students");

   int numberOfStudents = oScan.nextInt();

    for(int i = 0;i < numberOfStudents;i++){
    System.out.println("Enter First Name");
   String fn = oScan.nextLine();
    System.out.println(fn);

    System.out.println("Enter Last Name");
    String ln = oScan.nextLine();
    System.out.println(ln);

   //Add all the score stuff
 Student s = new Student(homeworkAve,quizAve,projectAve, testAve,fn,ln);
    students.add(s);
  }
}

编辑:编辑以包含列表

EDIT2:编辑制作 "Student" 个对象