int []总不打印

时间:2014-10-19 15:27:00

标签: java arrays

如果这个标题不具有描述性,我很抱歉;没有代码就很难解释问题。我的问题是:我正在运行此代码

 private static Integer[] buffer = new Integer[60];
 private static int sum;
 ...
 public static void main(String[] args) throws InterruptedException{
   ...
   while (true) {
     try {
       main.repaint(); //call paint() method for graphics
       rebuffer();
       getBufferSum();
       //System.out.println(sum);
     } catch (NullPointerException e) {}
     Thread.sleep(1000);
     //}catch(NullPointerException e){e.printStackTrace();}
    }
 }

    private static void getBufferSum() {
        System.out.println("Started");
        int total = 0;
        for(int i = 0; i < 60; i++){
            total += buffer[i];
        }
        System.out.println(total);
        sum = total;
    }

    private static void rebuffer() {
        for(int i = 1; i < 60; i++){
            buffer[i - 1] = buffer[i]; 
        }
        buffer[59] = count;
        //System.out.println(count);
        count = 0;
        System.out.println("Done");
    }

我得到了这个输出:

Done
Started
Done
Started
Done
Started
...

为什么行System.out.println(total);无法执行?

1 个答案:

答案 0 :(得分:3)

您的buffer变量是一个Integer数组,可以为空(与原始int相反,默认为0)。

getBufferSum方法中通过索引调用任何元素之前可能尚未初始化任何元素,因此未记录NullPointerException,因此休眠时间为1秒,因此{{之后打印1}}语句。

你应该在"Done"语句中添加e.printStackTrace();来解决这个问题,而不是睡1秒钟。

还要考虑调试代码。

正如Hovercraft Full Of Eels指出的那样,catch被视为非常糟糕的做法(大多数catch NullPointerException和所有RuntimeException s)。

从长远来看,你应该摆脱Error / try