1

I have a text file that is formatted as a square array. I am trying to convert this to a 2 dimensional array in Java. "st" is the text file described below.

This is my code:

public createArray(String st) throws NumberFormatException, IOException {

InputStream is;

is = new FileInputStream(st);

BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
    int row = 0;

    while ((line = br.readLine()) != null){
        String[] nums = line.split(" ");

        for (int col = 0; col < nums.length; col++){

            int n = Integer.parseInt(nums[col]);

            myArray[row][col] = n;
        }
        row++;

    }

I am getting a null pointer exception on the line:

myArray[row][col] = n;

If I print out the values of row, col, and n at each iteration, they appear to coincide correctly. However, I am still getting a NullPointerException.

The text file is formatted as:

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 0
5
  • i doubt this Integer.parseInt(nums[col]) may throw NPE. Commented Oct 15, 2013 at 4:50
  • 1
    show how you have declared myArray ? Commented Oct 15, 2013 at 4:51
  • myArray is an instance variable and is declared as int[][] myArray; Commented Oct 15, 2013 at 4:52
  • 1
    How do determine the number of rows and columns stored in the file? Commented Oct 15, 2013 at 4:54
  • My problem was that I did not initialize myArray with any size declaration before populating it. Commented Oct 15, 2013 at 4:59

2 Answers 2

5

I think you have not initialized int[][] myArray;

You should do something like this

int[][] myArray = new int[100][100];

OR

find the total rows in the file and initialize the row. And in each loop calculate the column and create the desired array

int[][] myArray;
{
    int rows = getTotalRows();
    myArray = new int[rows][];
}

then

while ((line = br.readLine()) != null){
        String[] nums = line.split(" ");
        myArray[row] = new int[nums.length]; //initialize dynamically here
        for (int col = 0; col < nums.length; col++){

            int n = Integer.parseInt(nums[col]);

            myArray[row][col] = n;
        }
        row++;
}
Sign up to request clarification or add additional context in comments.

Comments

3

Regards to your comment you didn't initiate array.

int[][] myArray = new int[100][]; // enough to define rows

Other way:

If you use Java 7 you can load text file to List. As I know this is a shortest way to create String[][]

String[][] myArray;

List<String> lines = Files.readAllLines(Paths.get("<your filename>"), StandardCharsets.UTF_8);

myArray = new String[lines.size()][]; 

for(int i =0; i<lines.size(); i++){
  myArray[i] = lines.get(i).split("[ ]+"); // you can use just split(" ") but who knows how many empty spaces
}

Now you have populated myArray[][]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.