我在程序中收到上述错误。它在类(class)类中突出显示了以下代码行:
return (s1.average() + s1.average() + s1.average() + s1.average() + s1.average()) / 5.0;
这是类(class)。之所以将括号删除,是因为我的教练告诉我要这样做。
public class Course extends Student
{
private String course;
private Student s1, s2, s3, s4, s5;
private int studentcount = 1;
public Course (String name)
{
super(); //
course = name;
}
public Student addStudent(String first, String last, Address home, Address school)
{
//if (studentcount == 1){
s1 = new Student(first,last,home,school);
studentcount++;
return s1;
//}
//if (studentcount == 2) {
s2 = new Student(first,last,home,school);
studentcount++;
return s2;
//}
//else if (studentcount == 3){
s3 = new Student(first,last,home,school);
studentcount++;
return s3;
//}
// else if (studentcount == 4){
s4 = new Student(first,last,home,school);
studentcount++;
return s4;
//}
//else if (studentcount == 5) {
s5 = new Student(first,last,home,school);
studentcount++;
return s5;
//}
//else {
System.out.println("No More students allowed in the class");
return null;
//}
}
public double average()
{
}
public String roll()
{
String results = "";
if (studentcount == 1){
results += s1.toString () +"n";
return results;
}
if (studentcount == 2) {
results += s1.toString () +"n";
results += s2.toString () +"n";
return results;
}
else if (studentcount == 3){
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
return results;
}
else if (studentcount == 4){
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
results += s4.toString () +"n";
return results;
}
else if (studentcount == 5) {
results += s1.toString () +"n";
results += s2.toString () +"n";
results += s3.toString () +"n";
results += s4.toString () +"n";
results += s5.toString () +"n";
return results;
}
else{
return null;
}
}
}
这是学生类:
public class Student
{
Address home = new Address("1027 Charleston St","Lincoln", "Ne", 68508);
Address school = new Address("1534 E St", "Lincoln", "Ne", 68508);
Student mike = new Student("Mike", "Vinci", home, school);
Student john = new Student("John", "Doe", home, school, 90, 80, 199);
//Below are the ints used
int test1 = 0;
int test2 = 0;
int test3 = 0;
int avg2;
int error = 0;
public Student(){
//empty
}
public void setTestScore(int testNum, int score)
{
if (testNum == 1)
test1 = score;
else if (testNum == 2)
test2 = score;
else if (testNum == 3)
test3 = score;
}
public int getTestScore(int testNum)
{
if (testNum == 1)
return test1;
else if (testNum == 2)
return test2;
else if (testNum == 3)
return test3;
else
return error;
}
public double average(int test1, int test2, int test3)
{
int avg2 = ((test1 + test2 + test3)/3); //finds the average of the tests
return avg2;
}
private String firstName, lastName; //private ints for coding
private Address homeAddress, schoolAddress;
public Student (String first, String last, Address home, Address school)
{
firstName = first;
lastName = last;
homeAddress = home;
schoolAddress = school;
}
public Student (String first, String last, Address home, Address school, int test11, int test22, int test33)
{
firstName = first;
lastName = last;
homeAddress = home;
schoolAddress = school;
test11 = test1;
test22 = test2;
test33 = test3;
}
public String toString()
{
String result;
result = firstName + " " + lastName + "\n";
result += "Home Address:\n" + homeAddress + "\n";
result += "School Address:\n" + schoolAddress + "\n";
result += "Average=" + avg2 + " with Tests: " + test1 + ", " + test2 + ", " + test3;
return result; //returns the result
}
class Address
{
private String streetAddress, city, state;
private long zipCode;
public Address(String street, String town, String st, long zip)
{
streetAddress = street;
city = town;
state = st;
zipCode = zip;
}
public String toString()
{
String result;
result = streetAddress + "\n";
result += city + "," + state + " " + zipCode;
return result; //returns the result
}
}
}
所以问题是,我该如何解决该错误?
最佳答案
错误的答案是,假设在调用该方法之前已设置average()
,test1
和test2
值,则删除test3
方法的参数。也许您应该对其中的空值进行一些检查?
public int average()
{
int avg2 = ((test1 + test2 + test3)/3); //finds the average of the tests
return avg2;
}
尽管在上述方法中返回
double
可能更适用,如@MarquisBlount所述:由于您将
avg2
声明为实例变量,因此可以使用average()
更新它以供以后使用。使用当前代码,就永远不会为打印输出设置avg2
,因为您正在创建一个仅与方法范围相关的新变量:int avg2 = (( ...
及其值一旦返回便被丢弃。我建议进行以下更改:
avg2
从int
更改为double
average()
可视化:
double avg2;
...
public int average()
{
avg2 = ((test1 + test2 + test3)/3); //finds the average of the tests
return avg2;
}
尽管您也可以在同一行中将
avg2
实例化为零,但是您可以声明它,并使用average()
对其进行“更新”:double avg2 = 0;
结果,在您的Course类的
double average()
方法中,您可以调用:public double average()
{
return (s1.average() + s2.average() + s3.average() + s4.average() + s5.average()) / 5.0;
}
再次,推断所有值都在每次调用之前填充。尽管看起来您已经按照这些假设构建了应用程序工作流。
关于java - 学生类里面的平均方法不能应用于给定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33043666/