/*
*不报错的写法
*/public static void getSummeVonXijMalDifferenzMalwg() throws FileNotFoundException, IOException{
        getProdukt();
        double[] sum = new double[windowSize];
        int j = 0;
       
        while(j < windowSize){
            for(int i = 0; i < myArray.length; i++){
                 sum[j] = sum[j] + myArray[i][j]; // sum of myArray's rows
                 //这里就不报错。
            } 
            j++;
        }
    }
但是我需要下面这种定义为static全局变量的写法,以便于提高速度。如何修改才能不报错并且还是全局变量???/*
*这个报错程序要如何修改才能成功运行?为了提高速度,我需要这种static全局的写法
*/
public static double[] sum = new double[windowSize];
    
.....
public static void getSummeVonXijMalDifferenzMalwg() throws FileNotFoundException, IOException{
        getProdukt();
        
        int j = 0;
       
        while(j < windowSize){
            for(int i = 0; i < myArray.length; i++){
                 sum[j] = sum[j] + myArray[i][j]; // sum of myArray's rows
                 //上面这行报错
            } 
            j++;
        }
    }

解决方案 »

  1.   

    public static double[] sum = new double[windowSize];这里的windowSize多大?够不够大?
      

  2.   


    public static void getSummeVonXijMalDifferenzMalwg() throws FileNotFoundException, IOException{
            getProdukt();
            
            int j = 0;
            sum = new double[windowSize];
            //这行添加到这里就不报错了,
            //不过速度和上面那个局部变量的写法一样啊        while(j < windowSize){
                for(int i = 0; i < myArray.length; i++){
                     sum[j] = sum[j] + myArray[i][j]; // sum of myArray's rows
                     //System.out.println("  sum[" + j + "] = " + sum[j] + ", ");
                } 
                j++;
            }
            
          
        }
      

  3.   

    当然,非常大可能的问题就是 windowSize 最开始根本就是0,那你的数组大小就是0,肯定什么数据都装不下。变通的做法可以考虑:
    if (windowSize > sum.length) sum = new double[windowSize];
    但我认为,即便你用了这种招数,其实速度也不能提升多少。分配数组内存这个动作非常快,基本上也就1ms以内的事情,除非你这个函数被调用的非常频繁,否则没啥性能提升。