Проблема с объектно-ориентированным программированием в Java

66
4

Итак, я хотел бы начать с того, что расскажу вам, что я изучаю Java самостоятельно, и вы, ребята, - это самое ближайшее, что у меня есть для учителей. Поэтому большое вам спасибо за то, что вы смирились с моим простым и очевидным вопросом. Я просто пытаюсь учиться. Еще раз я получаю сообщение об ошибке, что для жизни я не могу понять.


Вот ошибка:


Exception in thread "main" java.lang.NullPointerException
at Advisor_score.All_user.Score1(All_user.java:13)
at Advisor_score.All_user.main(All_user.java:28)

Вот мой код для класса рейтингов:


package Advisor_score;
public class Rating {
double [] Ratings;
double sum=0;
double raw_advisor;
double advisor_score;
public Rating (double [] x){
Ratings = x;
}

public double Score(){
for(int i=2;i<Ratings.length;i++){
sum+=Ratings[i];
}
raw_advisor=((sum-(3*(Ratings.length-2)))/4);
advisor_score= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor)));
return advisor_score;
}


Вот мой код для другого класса:


package Advisor_score;      

public class All_user{
double [] ADVISOR_SCORE;
Rating [] All_users;
double score;
public All_user(Rating...args){
All_users=args;
}

public double [] Score1(){
for (int j = 0;j<All_users.length;j++){
score=All_users[j].Score();
ADVISOR_SCORE[j]=score;
}
return ADVISOR_SCORE;
}
public void print(){
for(int i = 0;i<ADVISOR_SCORE.length;i++){
System.out.println(ADVISOR_SCORE[i]);
}
}
public static void main(String[] args){
double p1_1[] = {101,1,5,5,5};
double p2_1[] = {101,1,1,2,3};
Rating d = new Rating(p1_1);
Rating e = new Rating(p2_1);
All_user all=new All_user(d, e);
all.Score1();
all.print();
}

}


Опять же, я не могу поблагодарить вас, ребята, в StackOverflow. Ваша помощь неоценима!

спросил(а) 2010-09-14T19:41:00+04:00 9 лет, 9 месяцев назад
1
Решение
128

Вы не инициализировали массивы ADVISOR_SCORE и All_users, но пытаетесь присвоить значения и использовать их. Когда вы объявляете


double[] ADVISOR_SCORE; // this is null until assigned

В какой-то момент ему нужно назначить


ADVISOR_SCORE = new double[size];

ответил(а) 2010-09-14T19:44:00+04:00 9 лет, 9 месяцев назад
54

Джефф Стори предоставил лучшее объяснение, вот два полузадачи, которые мне нужно было изучить при изучении Java:


1) После инициализации этого массива


ADVISOR_SCORE = new double[size];

Вы не можете изменить длину массива, если вы не повторно инициализируете его. Студенты часто будут пытаться добавить другое значение в конец массива или каким-то образом "развить" его. Если это что-то вам нужно, проверьте Vector и ArrayList.


2) Соглашения о кодировании Java заключаются в том, чтобы использовать имена классов...

public class Rating {

... но оставьте первую букву имен методов в нижнем регистре.


public double [] getFirstScore() {

Это поможет прочитать, когда другие начнут работать над вашим кодом.


Счастливое кодирование!

ответил(а) 2010-09-14T20:10:00+04:00 9 лет, 9 месяцев назад
55

эта переменная:


double [] ADVISOR_SCORE;

не был инициализирован... и поэтому он null.

ответил(а) 2010-09-14T19:44:00+04:00 9 лет, 9 месяцев назад
54

ADVISOR_SCORE не был инициализирован

ответил(а) 2010-09-14T19:44:00+04:00 9 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема