2015-10-09 2 views
-1

Я получаю ошибку выше в моей программе. Он выделяет эту строку кода в классе курса:Метод средний по классу Ученик не может применяться к заданным типам

возврата (s1.average() + s1.average() + s1.average() + s1.average() + s1.average())/5,0;

Это класс курса. Причина, по которой скобки были прокомментированы, заключалась в том, что мой инструктор сказал мне сделать это.

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; 
} 

} 
} 

Это класс Student:

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 
} 
} 
} 

Так что вопрос как бы я исправить эту ошибку?

+0

так что вопрос: точно? на что вы ожидаете от нас ответа? – MWiesner

+0

Как исправить эту ошибку? извините, я добавлю это в сообщение – TheUnicornMaster

+0

, если вы зададите «хороший» вопрос - другие будут лучше давать вам лучшие ответы, если они точно поймут, что вы ищете;) – MWiesner

ответ

1

Ответ на вашу ошибку, чтобы удалить параметры для метода 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; 

В результате, в рамках double average() метода вашего класса Курса вы можете позвонить:

public double average() 
{ 
    return (s1.average() + s2.average() + s3.average() + s4.average() + s5.average())/5.0; 
} 

еще раз, вывод всех значений заносится до каждого вызова. Хотя похоже, что ваш рабочий процесс приложений уже построен вокруг этих предположений.

1

Вместо вызова:

return (s1.average() + s1.average() + s1.average() + s1.average() + s1.average())/5.0 

вызов:

return (s1.average(s1.test1,s1.test2,s1.test3) + s2.average(s2.test1,s2.test2,s2.test3) + s3.average(s3.test1,s3.test2,s3.test3) + s4.average(s4.test1,s4.test2,s4.test3) + s5.average(s5.test1,s5.test2,s5.test3))/5.0 
+0

Большое вам спасибо – TheUnicornMaster

+0

Я не думаю, что это лучший способ. У каждого класса уже есть доступ к тем мгновенным переменным, зачем извлекать их из каждого класса только для отправки их обратно как аргументы метода? – CubeJockey

+0

Я не видел вашего обновления @Trobbins, мне нужно будет вернуться через Интернет позже – TheUnicornMaster