无法为类实现测试程序

时间:2013-07-12 15:10:18

标签: java

这是家庭作业,也是我的第一个Java程序。我写了一个StudentAverage类,现在我想测试类方法,但是当我编写测试程序时,IDE告诉我我不能声明我的主静态。我使用Eclipse作为我的IDE。

由于这是一项家庭作业,我还在学习Java,我也很欣赏一些关于我做错的指导。

这是我的代码:

/**
 *Program:      StudentAverage, Calculate the student average quizzes taken
 * @author:     Jose Mazorra
 * Date:        July 11, 2013
 * Class:       CIS406
 */

/**
   A student who is taking quizzes.
*/
public class StudentAverage
{ 
    //Instances variables
    private String name;
    private double quizScores;
    private double numOfQuizzesTaken;

   /**
      Constructs a student with a given name.
      @param n the name
   */
   public StudentAverage(String stuName)
   {  
     name = (stuName);
   }

   /**
      Gets the name of this student.
      @return the name
   */
   public String getName()
   {  
     return name;
   }

   /**
      Adds a quiz score.
      @param score the score to add
   */
   public void addQuiz(int score)
   {  
     numOfQuizzesTaken++;
     quizScores = quizScores + score;
   }


   /**
      Gets the sum of all quiz scores.
      @return the total score
   */
   public double getTotalScore()
   {  
     return quizScores;
   }

/**Returns the average of all quiz taken
 * by the student
 * @return average score
 */

public double getAverageScore(){

double avgScore;

avgScore = (quizScores / numOfQuizzesTaken);

return avgScore;

}

public class StudentAverageTester{

    public static void main(String[] args){

        StudentAverage student = new StudentAverage()

        student.name("Jose");
        student.numOfQuizzesTaken(10);
        student.quizScores(400);

        double avg = student.avgScore();

        System.out.println(name);
        System.out.println(avg);
        System.out.println("Expected 40");



    }


}

}

4 个答案:

答案 0 :(得分:2)

您已将StudentAverageTester创建为StudentAverage的非静态内部类。非静态内部类不允许有static声明,这就是您看到编译错误的原因(参见JLS 8.1.3)。

StudentAverageTester类提取到自己的StudentAverageTester.java文件中会更好。

答案 1 :(得分:2)

您的代码中有一些错误。首先,做每个人的sais并将StudentAverageTester放在自己的文件中。目前,您在StudentAverage课程内声明。您还没有在StudentAverage类中声明无参数构造函数。在StudentAverageTester你有

StudentAverage student = new StudentAverage()

但它应该是

StudentAverage student = new StudentAverage("Some name")

你也忘记了半冒号。

<强>更新

您的name财产是私有的。您无法像StudentAverageTester中那样访问它。您需要在setName(String name)中声明一个setter方法。

考虑查看您的StudentAverageTester课程。您正在调用未定义的方法并直接访问私有成员。你不能这样做。使用setter和getter。

答案 2 :(得分:1)

你正在创建一个类另一个类。我不认为你打算这样做。如果这两个类都在一个文件中,那么只有一个类可以是public.Better将每个类移动到它的单独文件

<强>更新

  

所以这里的问题是你正在创建Inner类和Java   内部类不能有静态方法。因为内部类是   隐式地与其外部类的实例相关联,它不能   定义任何静态方法本身。由于静态嵌套类不能   直接引用其中定义的实例变量或方法   封闭类,它只能通过对象引用使用它们,   在静态嵌套类中声明静态方法是安全的。

答案 3 :(得分:0)

谢谢大家的意见和建议。这真的很有帮助。我按照建议创建了2个文件。一个用于我的测试员,一个用于主要课程。

这是我的测试人员类代码

class StudentTester {

    public static void main (String[] args){

        StudentAverage testAverage = new StudentAverage("Jose Mazorra", 50);

            testAverage.addQuiz(900);
            String name = testAverage.getName();

            double avg = testAverage.getAverageScore();

            System.out.println(name);
            System.out.println(avg);


    }

}

创建单独的文件比执行我最初所做的事情要简单得多,这就是将所有内容都放在一个文件中。更清洁,更容易维护。 我还对我的主要代码进行了一些修改:

    /**
   A student who is taking quizzes.
*/
public class StudentAverage
{ 
    //Instances variables
    private String name;
    private double quizScores;
    private double numOfQuizzesTaken;

    /**
     * Constructs a Student object with a name "Jose Mazorra" and zero total quiz score
     */
    public StudentAverage()
    {
        name = "Jose mazorra";
        quizScores = 0;
        numOfQuizzesTaken = 1;
    }

    /**
     * Constructs a Student object with an initial name and total quiz score
     */
    public StudentAverage(String pName, double pQuizScore)
    {
        name = pName;
        quizScores = pQuizScore;
        numOfQuizzesTaken = 20;
    }


   /**
      Gets the name of this student.
      @return the name
   */
   public String getName()
   {  
     return name;
   }

   /**
      Adds a quiz score.
      @param score the score to add
   */
   public void addQuiz(int score)
   {  
       quizScores = quizScores + score;
   }


  /**
      Gets the sum of all quiz scores.
      @return the total score
   */
   public double getTotalScore()
   {  
     return quizScores;
   }

/**Returns the average of all quiz taken
 * by the student
 * @return average score
 */

public double getAverageScore(){

double avgScore;

avgScore = (quizScores / numOfQuizzesTaken);

return avgScore;

}

}