Mam problemy z kodem konkretnie z tablicami. Mam trochę pętli skonfigurowanej do tablic, ale deklaruje tablice jako null. Czy wiesz, jaki jest błąd w swojej sekcji?

Nie jestem pewien, co muszę zrobić, aby naprawić problemy zerowe w tym przypadku. Przez kilka razy przeszedłem przez kod i nie mogłem tego zrozumieć.

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 sierpień 2020, 00:10

1 odpowiedź

Najlepsza odpowiedź

W każdej pętli zwiększasz indeks przed dostępem do bieżącego elementu. Na przykład, gdy counting_line1 jest 0 w pierwszej pętli, prawdopodobnie zamierzasz ustawić reservation_array_line1[0][0] do "Seat", wydrukuj tę wartość, a następnie przyrost counting_line1.

Jednakże, ponieważ przyrosteś przed uzyskaniem dostępu, faktycznie drukujesz reservation_array_line1[1][0], który nie został ustawiony na nic z wyjątkiem wartości domyślnej, null, ponieważ właśnie jest to, co następne iteracja pętli ma się zająć. W rzeczywistości zauważysz arrayindexoutofoundSexception na ostatniej iteracji pętli, gdy nieistniejący element, reservation_array_line1[20][0], próbuje uzyskać dostęp.

Aby go naprawić, po prostu zamień zamówienie, w którym przyrosteś i dostęp:

    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 sierpień 2020, 21:25