繁体   English   中英

Java中面向对象编程的问题

[英]Problem with object oriented programming in Java

所以我想首先告诉你我正在自学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上不能感谢你们。 你的帮助非常宝贵!

您尚未初始化ADVISOR_SCORE和All_users数组,但您确实尝试分配值并使用它们。 当你申报时

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

在某些时候,需要分配它

ADVISOR_SCORE = new double[size];

这个变量:

double [] ADVISOR_SCORE;

尚未初始化...因此它为null

ADVISOR_SCORE尚未初始化

Jeff Storey提供了最好的解释,这里有两个与学习Java时必须学习的半相关技巧:

1)初始化该阵列后

ADVISOR_SCORE = new double[size];

除非重新初始化,否则无法修改数组的长度。 学生经常会尝试将另一个值添加到数组的末尾,否则会以某种方式“增长”它。 如果这是您需要的,请检查VectorArrayList

2)Java编码约定是大写类名...

public class Rating {

...但是将方法名称的第一个字母保留为小写。

public double [] getFirstScore() {

当其他人开始处理您的代码时,它将有助于提高可读性。

快乐的编码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM