线程“主”中的Java wierd错误异常app.trackint.getmean(trackint.java:79)上的java.lang.NullPointerException

时间:2018-10-20 18:26:12

标签: java arrays nullpointerexception

大家好,我试图制作一个以数组为参数的类,并返回该数组中的min,max,mean和最频繁的元素。但是,在使该类的实例成为im时出现一个奇怪的错误,说Exception in thread "main" java.lang.NullPointerException at app.trackint.getmean(trackint.java:79)有人可以帮助我吗?谢谢大家的帮助!   谢谢大家的帮助!

/**
 *
 * @author User
 */


import java.util.Arrays;
public class trackint{


     private int[] array;

    public trackint(int[] a){


 a = new int[2];



    }

    public void getmax(int[] array){

      // Initialize maximum element 
         int max = array[0];

         for (int i = 1; i < array.length; i++) {
             if (array[i] > max) {
                 max = array[i]; 
             }
         System.out.println(max); 
     } 



    }


   public void getmin(int min){

        min = array[0];

         for (int i = 1; i < array.length; i++) {
             if (array[i] < min) {
                 min = array[i]; 
             }
    System.out.println(min); 
     } 



    }

       public void getmax(int max){

      // Initialize maximum element 
        max = array[0];

         for (int i = 1; i < array.length; i++) {
             if (array[i] > max) {
                 max = array[i]; 
             }
      System.out.println(max); 
     } 
       }

        public void getmean(){

      // Initialize maximum element 

        float sum = 0;
    for (int i = 0; i < array.length; i++) {
        sum += array[i];
    }
   System.out.println( sum / array.length);
     } 





       public void mostFrequent(int n, int[] array) {



        // find the max frequency using linear 
        // traversal 
        int max_count = 1, res = array[0]; 
        int curr_count = 1; 

        for (int i = 1; i < n; i++) 
        { 
            if (array[i] == array[i - 1]) 
                curr_count++; 
            else 
            { 
                if (curr_count > max_count) 
                { 
                    max_count = curr_count; 
                    res = array[i - 1]; 
                } 
                curr_count = 1; 
            } 
        } 

        // If last element is most frequent 
        if (curr_count > max_count) 
        { 
            max_count = curr_count; 
            res = array[n - 1]; 
        } 

       System.out.println( res); 

     } 


     public static void main(String []args){

        int[] array =  {1,2,3,4,5};
        trackint a  = new trackint(array);
        a.getmean();

     }
}

3 个答案:

答案 0 :(得分:0)

问题出在您的构造函数中,

您的构造函数未正确初始化实例变量int []数组,因为该实例变量保持为空,并在此代码array.length处引发NullPointerException,

for (int i = 0; i < array.length; i++) { // here array is null so throws NPException

您需要使您的构造函数像这样

public trackint(int[] a) {
    array = a;
}

而不是

public trackint(int[] a) {    
        a = new int[2];    
    }

答案 1 :(得分:0)

public trackint(int[] a){
    a = new int[2];
}

这正在重新分配a局部变量。相反,您应该这样做

public trackint(int[] a){
    array = a;
}

这会将array设置为a的值。

我还没有测试过。因此,如果答案有任何问题,请在下面评论。

答案 2 :(得分:0)

您必须初始化array

public trackint(int[] a){
    array = a;
}

public trackint(int[] a) {
    array = new int[a.length];
    System.arraycopy(a, 0, array, 0, a.length);
}

或仅将数组传递给getmean函数。