2

这是一个家庭作业,也是我的第一个 Java 程序。我写了一个 StudentAverage 类,现在我想测试类方法,但是当我编写我的测试程序时,IDE 告诉我不能声明我的 main static。我使用 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

4 回答 4

2

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

如果您将StudentAverageTester类提取到它自己的StudentAverageTester.java文件中,那就更好了。

于 2013-07-12T15:25:40.527 回答
2

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

StudentAverage student = new StudentAverage()

但应该是

StudentAverage student = new StudentAverage("Some name")

您还忘记了分号。

更新

您的name财产是私有的。您无法在StudentAverageTester. 您需要声明一个 setter 方法,如setName(String name).

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

于 2013-07-12T15:30:45.580 回答
1

您正在创建一个类另一个类。我认为您不打算这样做。此外,如果这两个类都在一个文件中,则只有一个类可以是公共的。最好将每个类移到其单独的文件中

更新:

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

于 2013-07-12T15:11:40.033 回答
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;

}

}
于 2013-07-12T18:41:51.707 回答