nullpointerexception

nle07wnf  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(249)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
我想在每个方法中全局地访问节点[i],我错在哪里?

class file{
    private static java.io.File file;
    private static BufferedReader reader;
    private static int[] nodes;

    static {
            try {
                file = new java.io.File("/home/madhu/Desktop/readData.txt");
                reader = new BufferedReader(new FileReader(String.valueOf(file)));
                String totalNode = reader.readLine();
                String[] strs = totalNode.trim().split(",");
                 for (int i = 0; i < strs.length; i++) {
                        int a = Integer.parseInt(strs[i]);
                        nodes[i]=a;
                 }
           } catch (IOException e) {
                e.printStackTrace();
           }            
    }
    private static void level() {
        System.out.println(nodes[2]);
    }
    public static void main(String[] args) throws Exception {
        System.out.println(nodes[2]);
    }
}

readdata.txt包含:

1,2,4

我想在进一步的计算中使用单个数字,那么如何独立地访问它呢?

a2mppw5e

a2mppw5e1#

未创建数组

你从来没有创建过数组。把数组想象成一个有插槽的容器,就像一个有架子的橱柜。架子在你装满之前是空的。但你的代码从来没有建立过内阁。你的代码只表达了一个愿望,希望在某个时候拥有一个内阁,但从来没有得到左右,使说内阁。
你的台词 private static int[] nodes; 声明变量 nodes 准备好并愿意在构建某个数组时引用(指向)该数组。
要建造那个柜子,那个阵列 new int[] {…} .
将代码更改为以下内容:

package work.basil.example;

public class StaticTrial
{
    private static java.io.File file;
    private static int[] nodes;

    static
    {
        StaticTrial.nodes = new int[] { 11 , 12 , 13 };  
    }

    private static void level ( )
    {
        System.out.println( nodes[ 2 ] );
    }

    public static void main ( String[] args ) throws Exception
    {
        System.out.println( "Running `main` method." );
        System.out.println( nodes[ 2 ] );
        System.out.println( "Ending `main` method." );
    }
}

…或者这个…

package work.basil.example;

public class StaticTrial
{
    private static java.io.File file;
    private static int[] nodes = new int[] { 11 , 12 , 13 };

    private static void level ( )
    {
        System.out.println( nodes[ 2 ] );
    }

    public static void main ( String[] args ) throws Exception
    {
        System.out.println( "Running `main` method." );
        System.out.println( nodes[ 2 ] );
        System.out.println( "Ending `main` method." );
    }
}

为了简单起见,我忽略了您的文件加载代码,因为这似乎与您的问题的意图无关。我将扫除使用前三思而后行的常规警告 static ,我不会解释如何使用 static 不是面向对象的,并且充满了误用的风险。

gupuwyp2

gupuwyp22#

你的代码从不初始化 int[] nodes . 因此,您需要在for循环之前对其进行初始化,如下所示:

nodes = new int[strs.length];

因此,更新后的静态块应如下所示:

static {
    try {
      file = new java.io.File("/home/madhu/Desktop/readData.txt");
      reader = new BufferedReader(new FileReader(String.valueOf(file)));
      final String totalNode = reader.readLine();
      final String[] strs = totalNode.trim().split(",");

      // CHANGE IS HERE
      nodes = new int[strs.length];

      for (int i = 0; i < strs.length; i++) {
        final int a = Integer.parseInt(strs[i]);
        nodes[i] = a;
      }
    } catch (final IOException e) {
      e.printStackTrace();
    }

  }

相关问题