0

I am having trouble with the code specifically with the arrays. I have a while loop set up for the arrays but it's declaring the arrays as null. Do you know what the bug is in my array section?

I'm not sure what do I need to do to fix the null issues in this case. I have went through the code several times and couldn't figure it out.

import java.util.Scanner;
//imports scanner object 
import java.util.Arrays;
//imports scanner object
public class Assignment8_jkaur1240026 {

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    int club_seat = 0;
    //creates and initializes club_seat variable
    int coach_seat = 5;
    //creates and initializies coach_seat variable
    int counting_line1 = 0;
    //creates and initializes counting1 variable
    int counting_line2 = 0;
    //creates and initializes counting2 variable
    int counting_line3 = 0;
    //creates and initializes counting3 variable
    boolean reservation = true; 
    //boolean used to keep the loop going
    Scanner input = new Scanner( System.in );
    // create a Scanner object 
    do{
        System.out.print( "Please specify service class  " );
        System.out.println( "(1 = club 2 = coach): ");
        //prompt the user to say club or coach seating 
        int seating_class = input.nextInt();
        //stores the input in seating_class variable 
        System.out.println();
        //line break
        if(seating_class == 1){
            //if seating_class var is 1
            if(club_seat < 5){
                //if club seat is less than 5
                club_seat = club(club_seat);
                System.out.println("Club Class: Seat # "+ club_seat);
                //call the club method and prints it
            }
            else{
                //if club seats are greater than 5
                System.out.println("Sorry we are out of club seats");
            }
        }
        else if(seating_class == 2){
            //if seating_class var is 1
            if(coach_seat < 20){
                //if club seat is less than or equal to 20
                coach_seat = coach(coach_seat);
                System.out.print("Coach Class: Seat # "+ coach_seat);
                //call the club method and prints it
            }
            else{
                //if coach seats are greater than 20
                System.out.println("Sorry we are out of coach seats");
            }

        }
        else{
            System.out.println("Sorry we don't have that service class");
            //Say we don't have that class if seating class is not 1 or 2
        }
        System.out.println();
        //line break 
        System.out.println("Another reservation (1 = yes 2 = no)? ");
        //ask user if they want another reservation 
        int another_reservation = input.nextInt();
        //store the value inside another reservation int
        if(another_reservation == 1){
            //if anther reservation is 1
            reservation = true;
            //keep the boolean reservation as true
        }
        else if(another_reservation == 2){
            //if another reservation is 2
            reservation = false;
            //change the boolean reservation to false
            System.out.println("Have a good day!");
            //say bye bye
        }
        else{
            //if another reservation int is not 1 or 2
            System.out.println("Sorry we don't understand that command");
            //tell the user that they are invalid response
        }
        System.out.println();
        //line break
    }
    while(reservation == true);
    //keep going if reservation is true
    String reservation_array_line1[][] = new String [20][1];
    while(counting_line1 < 20){
        reservation_array_line1[counting_line1][0] = "Seat";
        counting_line1 = counting_line1 + 1;
        System.out.println(reservation_array_line1[counting_line1][0]);
    }
    int reservation_array_line2[][] = new int [20][1];
    while(counting_line2 < 20){
        reservation_array_line2[counting_line2][0] = counting_line2;
        counting_line2 = counting_line2 + 1;
        System.out.println(reservation_array_line2[counting_line2][0]);
    }
    String reservation_array_line3[][] = new String [20][1];
    while(counting_line3 < 20){
        reservation_array_line3[counting_line3][0] = "E";
        counting_line3 = counting_line3 + 1;
        System.out.println(reservation_array_line3[counting_line3][0]);
    }
    
    
}
public static int club( int club_seat ){
    //method to assign user club seats
    club_seat = club_seat + 1;
    //increase club_seat by one
    return(club_seat);
    //return that value
}
public static int coach( int coach_seat ){
    //method to assign user coach seats 
    coach_seat = coach_seat + 1;
    //increase coach_seat by one
    return(coach_seat);
    //return that value
}

}**

1 Answer 1

5

In each loop you increment the index prior to accessing the current element. For example, when counting_line1 is 0 in the first loop, you probably intend to set reservation_array_line1[0][0] to "Seat", print out this value, and then increment counting_line1.

However, because you increment before you access, you actually print out reservation_array_line1[1][0], which hasn't been set to anything except its default value, null, because that's what the next iteration of your loop is supposed to take care of. In fact, you will notice an ArrayIndexOutOfBoundsException on the last iteration of your loop when a non-existent element, reservation_array_line1[20][0], attempts to be accessed.

To fix it, simply swap the order in which you increment and access:

    String reservation_array_line1[][] = new String [20][1];
    while(counting_line1 < 20){
        reservation_array_line1[counting_line1][0] = "Seat";
        System.out.println(reservation_array_line1[counting_line1][0]);
        counting_line1 = counting_line1 + 1;
    }
    int reservation_array_line2[][] = new int [20][1];
    while(counting_line2 < 20){
        reservation_array_line2[counting_line2][0] = counting_line2;
        System.out.println(reservation_array_line2[counting_line2][0]);
        counting_line2 = counting_line2 + 1;
    }
    String reservation_array_line3[][] = new String [20][1];
    while(counting_line3 < 20){
        reservation_array_line3[counting_line3][0] = "E";
        System.out.println(reservation_array_line3[counting_line3][0]);
        counting_line3 = counting_line3 + 1;
    }
Sign up to request clarification or add additional context in comments.

3 Comments

Thank yo very much for your help, it makes perfect sense now. You are the best!!!
I need help with one more thing. I am having trouble with printing the arrays vertically. The only way I could think of doing it is by one complete array but you can not have string and int values in one array.
I can't tell exactly what you mean from that comment, but perhaps you are trying to combine reservation_array_line1, reservation_array_line2, and reservation_array_line3 into a single 2-dimensional array. As you say, an array can only have 1 static type. One option would be to make this type a String, and simply cast every single int to a String. However, you would definitely get more luck if you posted a new question in which you attempt a solution and explain where exactly the unexpected behavior is @DennisCallagher

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.