从一个对象获取Java方法,从另一个对象获取构造函数

时间:2018-01-31 20:10:11

标签: java

我有三个班级Homework,其中main(...)GradeArray有我的方法,StudentGrade有我的构造函数。

目前,这显然是错误的,我在家庭作业中:

GradeArray grade = new GradeArray();`

在顶部的GradeArray中我有StudentGrade[] ArrayGrades = new StudentGrade[size];但是这个方法没有给我构造和方法。我知道我不需要三节课,但我的教授想要三节课。如何声明一个包含两个类属性的数组,以便我可以从GradeArray获取方法,从StudentGrade获取构造函数?

谢谢你的时间和帮助。

这是我的所有代码

package homework1;

public class Homework1
{  
   public static int pubSize;
   public static String pubCourseID;

   public static void makeVarsPub(int maxSize, String courseID)  //this is to makes the varibles public
   {
     pubSize = maxSize;

     pubCourseID = courseID;
   }
  public int giveSize()
  {
    return pubSize;
  }

  public static void main(String[] args)
  {
     int maxSize = 100;    
     String courseID = "CS116";
     //this is to makes the varibles public

     makeVarsPub(maxSize, courseID);

     StudentGrade grades = new StudentGrade();

     grades.insert("Evans", 78, courseID);
     grades.insert("Smith", 77, courseID);
     grades.insert("Yee", 83, courseID);
     grades.insert("Adams", 63, courseID);
     grades.insert("Hashimoto", 91, courseID);
     grades.insert("Stimson", 89, courseID);
     grades.insert("Velasquez", 72, courseID);
     grades.insert("Lamarque", 74, courseID);
     grades.insert("Vang", 52, courseID);
     grades.insert("Creswell", 88, courseID);

     // print grade summary: course ID, average, how many A, B, C, D and Fs
     System.out.println(grades);   

     String searchKey = "Stimson";  // search for item
     String found = grades.find(searchKey);
     if (found != null) {
        System.out.print("Found ");
        System.out.print(found);
     }
     else
        System.out.println("Can't find " + searchKey);

     // Find average and standard deviation
     System.out.println("Grade Average: " + grades.avg());
     System.out.println("Standard dev;  " + grades.std());

     // Show student grades sorted by name and sorted by grade
     grades.reportGrades();     // sorted by name  
     grades.reportGradesSorted();       // sorted by grade

     System.out.println("Deleting Smith, Yee, and Creswell");
     grades.delete("Smith");           // delete 3 items
     grades.delete("Yee");
     grades.delete("Creswell");

     System.out.println(grades);    // display the course summary again


   }//end of Main

 }//end of homework1




package homework1;

class GradeArray
{
  int nElems = 0; //keeping track of the number of entires in the array.
  Homework1 homework1InfoCall = new Homework1();  //this is so I can get the information I need.
  int size = homework1InfoCall.giveSize();


  StudentGrade[]  ArrayGrades = new StudentGrade[size];


   public String ToString(String name, int score, String courseID)
   {

       String res = "Name: " + name + "\n";
       res += "Score: " + score + "\n";
       res += "CourseID " + courseID + "\n";
       return res;
   }

   public String getName(int num) //returns name based on array location.
   {
      return ArrayGrades[num].name;
   }  

   public double getScore(int num)  //returns score based on array location.
   {
      return ArrayGrades[num].score;
   }  

   public void insert(String name, double score, String courseID)  //part of the insert method is going to be
           //taken from lab one and modified to fit the need.
   {
     if(nElems == size){
          System.out.println("Array is full");
          System.out.println("Please delete an Item before trying to add more");
          System.out.println("");
        }
      else{
        ArrayGrades[nElems].name = name;
        ArrayGrades[nElems].score = score;            
        ArrayGrades[nElems].courseID = courseID;
        nElems++;                      // increment the number of elements

       };
   }

   public void delete(String name) //code partly taken from lab1
   {
     int j;
     for(j=0; j<nElems; j++)        // look for it
        if( name == ArrayGrades[j].name)
           break;
     if(j>nElems)                  // can't find it
     {
        System.out.println("Item not found");
     }
     else                           // found it
     {
       for(int k=j; k<nElems; k++) // move higher ones down
        {
            boolean go = true;
            if ((k+2)>size)
                go = false;
            if(go)
                ArrayGrades[k] = ArrayGrades[k+1];
         }
            nElems--;                   // decrement size
            System.out.println("success");

         }
   }


   public String find (String name){ //code partly taken from lab1
      int j;

      for(j=0; j<nElems; j++)            // for each element,
         if(ArrayGrades[j].name == name)        // found item?
            break;                       // exit loop before end
      if(j == nElems)                    // gone to end?
         return null;                   // yes, can't find it
      else
         return ArrayGrades[j].toString();

   }

   public double avg() //this is to get the average
   {
      double total = 0;
      for(int j=0; j<nElems; j++)
          total += ArrayGrades[j].score;

      total /= nElems;

      return total;
   }

   public double std() //this is to get the standard deviation. Information on Standard deviation derived from
           //https://stackoverflow.com/questions/18390548/how-to-calculate-standard-deviation-using-java
   {  
       double mean = 0; //this is to hold the mean
       double newSum = 0;
       for(int j=0; j < ArrayGrades.length; j++) //this is to get the mean.
           mean =+ ArrayGrades[j].score;
       for(int i=0; i < ArrayGrades.length; i++)  //this is to get the new sum.
           newSum =+ (ArrayGrades[i].score - mean);
       mean = newSum/ArrayGrades.length;  //this is to get the final answer for the mean.

       return mean;
   }

   public StudentGrade[] reportGrades()  //this is grade sorted by name
   {

     int in,out;
     char compair;  //this is for compairsons.
     StudentGrade temp; //this is to hold the orginal variable.
     //for the first letter cycle
     for(out=1; out<ArrayGrades.length; out++)
     {
       temp =  ArrayGrades[out];
       compair= ArrayGrades[out].name.charAt(0);  
       in=out;
       while(in>0 && ArrayGrades[in-1].name.charAt(0) > compair)
       {
         ArrayGrades[in] = ArrayGrades[in-1];
         in--;
       }
       ArrayGrades[in]=temp;
     }

     //this is for the second run.
     for(out=1; out<ArrayGrades.length; out++)
     {
       temp = ArrayGrades[out];
       compair= ArrayGrades[out].name.charAt(1);  
       in=out;
       while(in>0 && ArrayGrades[in-1].name.charAt(1) > compair)
       {
         ArrayGrades[in] = ArrayGrades[in-1];
         in--;
       }
       ArrayGrades[in]=temp;
     }    

     return ArrayGrades;
   }

   public StudentGrade[] reportGradesSorted() //this is grades sorted by grades.
           //this is grabbed from lab2 and repurposed.
   {
     int in,out;
     double temp;
     for(out=1; out<ArrayGrades.length; out++)
     {
       temp=ArrayGrades[out].score;  
       in=out;
       while(in>0 && ArrayGrades[in-1].score>=temp)
       {
         ArrayGrades[in]= ArrayGrades[in-1];
         in--;
       }
       ArrayGrades[in].score=temp;
   }
     return ArrayGrades;
} //end of GradeArray


package homework1;


public class StudentGrade extends GradeArray
{
   public String name;
   double score;
   public String courseID;



   public void StudentGrade (String name, double score, String courseID)  //this is the constructor
   {                              
      this.name = name;
      this.score = score;
      this.courseID = courseID;
   }


}//end of StudentGrade class.

2 个答案:

答案 0 :(得分:1)

首先,我觉得@Alexandr有最好的答案。和你的教授谈谈。

您的问题并未明确表达您的需求。然而,听起来对继承和类构造的基本理解会让你走上正确的道路。这3个类中的每一个都将具有该类型唯一的构造函数。这三个类中的每一个都将具有这些类型独有的方法和数据(成员)。

下面只是我汇集在一起​​的一个简单例子。我强烈担心我的答案实际上是你教授正在寻找的东西 - 它不是我建议的对象模型 - 只是一个例子。

public class Homework {
    private String student;
    public Homework(String name) {
        student = name;
    }
    public String getStudent() {
        return student;
    }
}

public class StudentGrade extends Homework {
    private String grade;
    public StudentGrade(String grade, String name) {
        super(name);

        this.grade = grade;
    }
    public String getGrade() {
        return grade;
    }

}

public class HomeworkGrades {
    public List<StudentGrade> getGrades() {
         // this method isnt implemented but should
         // be finished to return array of grades
    }
}

看看是否有助于您了解有关继承和类构造的内容。

希望你能推断一下遗产(StudentGrade继承 - 在java扩展中 - 来自HomeWork)和类构造。

日Thnx 马特

答案 1 :(得分:0)

我将Homework1中的数组创建更改为StudentGrade grades = new StudentGrade();,并将extends GradeArray添加到StudentGrade类。它现在是public class StudentGrade extends GradeArray