【问题标题】:null pointer exception just after declaring variable声明变量后的空指针异常
【发布时间】:2013-06-13 15:04:45
【问题描述】:

我有一段代码,我在 for 循环中声明了变量 i,然后我尝试打印 i,它给了我一个空指针异常。我真的不知道为什么,我只是声明了变量..

 public void normalization(){
        for(int i = 0; i < numberOfVariables; i++){
            out.print(i);
            double min = unitRow.getMin(i);
            double max = unitRow.getMax(i);

            for(int j = 0; j < numberOfRecords; j++){
                double normalizedValue = normalizeValue(unitRow.unitArray[j].numberRow.numberArray[i],min,max);
                unitRow.unitArray[j].numberRow.update(i, normalizedValue);

            }
        }
    }

【问题讨论】:

  • 表示out 为空。你是说System.out 吗?
  • 你应该说 what's null。显然i 不为空。
  • 自己试试调试看看。也许它与out 的范围有关?有一件事是肯定的,i 没有参与。
  • @tortilla 在没有任何上下文的情况下,除了您没有按照您的想法声明它,或者您在设置它之前调用它,或者......等等. 它与i 无关,与out 无关。
  • 您是否有堆栈跟踪(或至少有发生错误的行号)?您确定错误出在out.print(i) 而不是其他地方吗? unitRow.unitArray[j].numberRow.numberArray[i] 看起来很可疑。

标签: java variables nullpointerexception


【解决方案1】:

你初始化out了吗? System.out.print() 是普通命令...可能会被简单的out 混淆。

【讨论】:

  • 很久以前,在很久很久以前的一个地方,我曾经记得让你只使用 out.print 而不是完整命令的命令。但这是可能的
  • 我什么都不记得了。这可能是一些简单而愚蠢的事情,但对于我的生活,我不记得了。这些天我很少使用 System.out.println() 了。我编写了自己的调试函数,它为我添加标签并将输出重定向到任何提供的输出流。
  • 是的。一旦我的项目稳定下来,我会花时间作为唯一的开发人员来实现一个更好的日志框架。然而,与此同时,我的方法完成了它需要做的事情。
  • 我是说已经有个日志框架,仅此而已——作为一个旨在重用他人工作的唯一开发人员应该是一个优先事项,至少在 IMO 中是这样。
  • 当我开始这个项目时,我不知道有任何日志框架(项目开始于几年前,当时我还年轻,在强制的方式上不太聪明——我的意思是 java)。不过,总的来说,我同意这样的框架是可行的。
【解决方案2】:

out.print(i) 行应该是 System.out.println(i);

【讨论】:

  • 除非是静态导入,或者其他输出流。
【解决方案3】:

out 是什么?

你应该像PrintStream out = System.out;一样分配它

或者干脆使用System.out.print(i);

for(int i = 0; i < numberOfVariables; i++){
            System.out.print(i);
            double min = unitRow.getMin(i);
            double max = unitRow.getMax(i);
   }

【讨论】:

    【解决方案4】:

    您正在尝试打印i,而此时您得到的是NullPointerExceptionNullPointerException 当您在不引用任何对象的引用变量上调用方法时发生。所以在你的情况下,显然out 变量是null

    请给它分配一个对象。

    您可以使用分配一个 printWriter

    PrintWriter out = new PrintWriter(System.in);
    

    或者如果您只是想在系统上使用 System.out.println();

    【讨论】:

      【解决方案5】:

      如果您只想打印“i”,请使用 System.out.print(i)。并且它不会给出空异常。

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2021-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多