Travis Wittmann
Travis Wittmann

Reputation: 111

Manipulating 2d arrays in Java

So for homework I have to write a program that prints out a table of airline seats denoted with - by default (i.e. to show that they are "open" and eligible for booking). Subsequently, it is supposed to prompt the user for a seat they would like to purchase & change the value of that particular spot in the array to a X.

This is what my code looks like right now - it prints out the table just fine, but when I try to change the location it gives me an error:

import java.util.*;

public class AirlineSeeting {

    public static void main(String[]args) {
        int row = 0;
        int colum = 0;
        System.out.println("Enter n:");
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        String[][] SeetingChart = new String[n][4];

        for (int i = 1; i <= 4; i++) {
            System.out.printf("\t%d\t", i);
        }

        System.out.println("");

        for (int j = 1; j <= n; j++) {
            System.out.printf("%d", j);
            for (int k = 1; k <= 4; k++) {
                System.out.print("\t-\t");
            }
            System.out.println("");
        } 
        for( int i = 0 ; i < SeetingChart.length; i++){
            System.out.println("What row would you like to sit in");
            row = scanner.nextInt();
            System.out.println("What colum would you like to sit in");
            colum = scanner.nextInt();
            if (SeetingChart[row][colum].equals("X")){
                System.out.println("Please pick a seat that is avalable");
            }
            else if (SeetingChart[row][colum].equals("-")){
                SeetingChart[row][colum] = "X";
            }
            for (int j = 1; j <= 4; j++) {
                System.out.printf("\t%d", j);
            }

            System.out.println("");

            for (int j = 1; j <= n; j++) {
                System.out.printf("%d", j);
                for (int k = 1; k <= 4; k++) {
                    System.out.print("\t-");
                }
                System.out.println("");
            } 
        }
    } 
}

This is the output I am getting when executing the above code:

Enter n:
9
    1       2       3       4   
1   -       -       -       -   
2   -       -       -       -   
3   -       -       -       -   
4   -       -       -       -   
5   -       -       -       -   
6   -       -       -       -   
7   -       -       -       -   
8   -       -       -       -   
9   -       -       -       -   
What row would you like to sit in
2
What colum would you like to sit in
2
Exception in thread "main" java.lang.NullPointerException
    at AirlineSeeting.main(AirlineSeeting.java:30)

Any help with this will be greatly appreciated! Thank you!

Upvotes: 4

Views: 252

Answers (3)

brso05
brso05

Reputation: 13222

The problem is you never initialize your array to have "-" in them so every element of array SeetingChart is initialized to null.

if (SeetingChart[row][colum].equals("X")){

You are trying to invoke .equals on a null reference which isn't possible.

I would recommend initializing all elements of SeetingChart to "-".

You can use Arrays.fill(SeetingChart[i], "-"); to fill your array taken from here

Example:

for(int i = 0; i < test.length; i++)
{
    Arrays.fill(SeetingChart[i], "-");
}

Upvotes: 0

condorcraft110 II
condorcraft110 II

Reputation: 261

Welcome to StackOverflow!

Your problem is that you never initialise the contents of the array, so when you try to call equals() on the element an NPE is thrown because that is what happens if 'null' is manipulated in Java. When you check if the seat is occupied, add a null check like so:

if (SeetingChart[row][colum] != null && SeetingChart[row][colum].equals("X")){

Upvotes: 0

Turing85
Turing85

Reputation: 20185

SeetingChart is an array of Objects, i.e. String. Therefore, all entries are initialized with null. Your program crashes at

            if (SeetingChart[row][colum].equals("X")){

because you try to call a method (i.e. equals) on a null. This is the reason, why you should switch the statement around:

            if ("X".equals(SeetingChart[row][colum])){

This prevents the NullPointerException.

Upvotes: 1

Related Questions