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

时间:2015-02-28 20:32:21

标签: java class inheritance arraylist constructor

我是新手。我正在编写一个程序,该程序使用以下信息来计算一些学生的成绩,但我从一开始就陷入困境。我在一个软件包中使用不同的类,我只是不知道如何将它们放在main方法中。我收到此消息"非静态变量FirstName无法从静态上下文引用错误。"当我写" FirstName = oScan.nextLine();"在最后几行。我的问题是如何在我的main方法中使用下面的那些属性 名字 姓 家庭作业大道 测验大道 项目大道 测试大道 最终成绩 字母等级

我是否写过正确的构造函数,getter和setter?

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

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


}

这是第二类

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

1 个答案:

答案 0 :(得分:1)

您需要创建类的实例才能访问非静态方法/变量。

这意味着:

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:编辑制作“学生”对象