Tengo problemas con el código específicamente con las matrices. Tengo un ciclo while configurado para las matrices, pero declara las matrices como nulas. ¿Sabes cuál es el error en mi sección de matriz?

No estoy seguro de qué debo hacer para solucionar los problemas de nulos en este caso. Revisé el código varias veces y no pude entenderlo.

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
}

}**
0
Dennis Callagher 4 ago. 2020 a las 00:10

1 respuesta

La mejor respuesta

En cada bucle, incrementa el índice antes de acceder al elemento actual. Por ejemplo, cuando counting_line1 es 0 en el primer ciclo, probablemente pretenda establecer reservation_array_line1[0][0] en "Seat", imprimir este valor y luego incrementar counting_line1.

Sin embargo, debido a que incrementa antes de acceder, en realidad imprime reservation_array_line1[1][0], que no se ha configurado en nada excepto en su valor predeterminado, null, porque eso es lo que siguiente Se supone que la iteración de su bucle se encarga. De hecho, notará una ArrayIndexOutOfBoundsException en la última iteración de su bucle cuando un elemento inexistente, reservation_array_line1[20][0], intente acceder.

Para solucionarlo, simplemente cambie el orden en el que incrementa y accede:

    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;
    }
5
ajc2000 3 ago. 2020 a las 21:25