簡體   English   中英

為什么這段代碼會生成 NullPointerException?

[英]Why is this code generating a NullPointerException?

我想在二維數組中加載兩個機器人的初始位置,它們由字母 N、S、O、E 表示。

以下代碼不起作用。 為什么?

static Point[] robotInitialPositions(char [][]inputMatrix){

     Point [] helperArray = new Point[2];

     int aux=0;

     for (int i=0; i<(inputMatrix[0].length-1); i++)
         for (int j=0; j<(inputMatrix[0].length-1); j++)
         {
            if((inputMatrix[i][j]=='N')||(inputMatrix[i][j]=='S')||(inputMatrix[i][j]=='O')||(inputMatrix[i][j]=='E'))
            {
                    helperArray[aux++]= new Point(i,j);                 
            }

         }

     System.out.println("helper array 1: i,j " + helperArray[1].i + ", " + helperArray[1].j);
     //NullPointerException here 
     return helperArray;

 }

完整代碼:

package bfs_robots;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

class Point {

    int i;
    int j;

    Point(int i, int j){
        this.i=i;
        this.j=j;
    }

}

public class Main {




 static char turnCounter (char orientation){

     if(orientation=='N')
         return 'O';
     if(orientation=='O')
         return 'S';
     if (orientation=='S')
         return 'E';
     else
         return 'N';

 }

 static char turnClock(char orientation){

      if(orientation=='N')
         return 'E';
     if(orientation=='E')
         return 'S';
     if (orientation=='S')
         return 'O';
     else
         return 'N';

 }

 static Point[] robotInitialPositions(char [][]inputMatrix){

     Point [] helperArray = new Point[2];

     int aux=0;

     for (int i=0; i<(inputMatrix[0].length-1); i++)
         for (int j=0; j<(inputMatrix[0].length-1); j++)
         {
            if((inputMatrix[i][j]=='N')||(inputMatrix[i][j]=='S')||(inputMatrix[i][j]=='O')||(inputMatrix[i][j]=='E'))
            {
                    helperArray[aux++]= new Point(i,j);                 
            }

         }

     System.out.println("helper array 1: i,j " + helperArray[1].i + ", " + helperArray[1].j);

     return helperArray;

 }



static void bfs_find_solution (char[][] inputMatrix){


    int countOfMovements=0;
    //  each turn and displacement adds one

    //  when moved N,S,D and O must be replaced with .
    // * indicates wall, invalid movement

    Point robotInitial[] = robotInitialPositions(inputMatrix);





}









    public static void main(String[] args) throws IOException {


        BufferedReader br = new BufferedReader(new FileReader(new File("input.txt")));

        char [][] inputMatrix;

        String line;
        char [] lineAsCharArray;
        int matrixSize;

        while(true){

            line = br.readLine();
            matrixSize=Integer.parseInt(line);

            inputMatrix = new char [matrixSize][matrixSize];

            if (matrixSize==0){  // end outer looping
                break;
            }

            else { //begin inner looping

                for (int i=0; i<matrixSize; i++){

                    line = br.readLine();
                    inputMatrix[i] =line.toCharArray();

                }

                bfs_find_solution(inputMatrix);
            }


        }

    }

}

input.txt (0 表示文件結束)

5
D....
N...S
.....
*...*
....D
5
.....
S..S.
.....
.....
D..D.
3
SN.
***
.DD
0
     for (int i=0; i<(inputMatrix[0].length-1); i++)         
         for (int j=0; j<(inputMatrix[0].length-1); j++)

似乎錯了。 第一行應該是 inputMatrix.length-1

我認為“<”也應該是“<=”。 或者保留“<”並且沒有“length-1”,而只是“length”

提供系統提供給您的錯誤行號很有幫助的一個原因是它也讓您查看它們。 您會注意到您的錯誤來自這一行

System.out.println("helper array 1: i,j " + helperArray[1].i + ", " + helperArray[1].j);

發生這種情況是因為 helperArray 是一個指針數組(長度為 2)。 最初都是 null。 它應該在那個嵌套循環的某個地方被初始化。 所以我輸入了一個打印語句來查看哪些元素被初始化並查看

Setting point 0
Exception in thread "main" java.lang.NullPointerException
    at Main.robotInitialPositions(Main.java:66)
    at Main.bfs_find_solution(Main.java:83)
    at Main.main(Main.java:130)

只有點 0 被設置。 但是您正在嘗試打印點 1,它仍然是 null。 所以這就是你收到錯誤的原因,我不確定你的代碼應該做什么,所以我會讓你弄清楚應該發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM