这是家庭作业,也是我的第一个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");
}
}
}
答案 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;
}
}