Java int[]总计未打印

Java int[]总计未打印,java,arrays,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.repa

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

 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");
    }
为什么line System.out.printlnotal;无法执行?

您的缓冲区变量是一个整数数组,可为空,与原语int相反,原语int默认为0

在getBufferSum方法中,任何元素在通过索引调用它们之前都可能尚未初始化,因此未记录NullPointerException,因此睡眠时间为1秒,因此此后将打印Done语句

您可能应该添加e.printStackTrace;在你的catch语句中找出这个问题,而不是睡一秒钟

也考虑调试您的代码。 正如所指出的,将NullPointerException捕获为大多数运行时异常和所有错误被认为是非常糟糕的做法


从长远来看,你应该摆脱这种“尝试/捕获”。

我不确定我们是否能够根据你发布的代码片段猜出你的代码不起作用的原因。为了更好的帮助,考虑创建和发布A。此外,解决问题的第一步将是隔离你的问题,这意味着是时候进行一些严肃的调试了,要么是调试器允许你在程序前进时,或者通过记录器,逐步地完成代码并分析变量。或者使用一个穷人的调试器—许多println语句在程序运行时暴露变量状态。OMG,您的代码是否真的有catch NullPointerException e{}??抱歉,但我刚才看到了,代码永远不应该有这种东西。您永远不会捕获NPE,也永远不会忽略异常。这是最糟糕的代码周期,因为这是非常危险的代码,相当于试图闭上眼睛开车。请保证不再这样做。@HovercraftFullOfEels[…]试图闭上眼睛驾驶汽车->如果你闭上眼睛,你可能会穿线。sleep1000l;。这个代码现在有意义了。
Done
Started
Done
Started
Done
Started
...