Java массив объявляется нулевым - PullRequest
0 голосов
/ 04 августа 2020

У меня проблемы с кодом именно с массивами. У меня есть некоторое время l oop для массивов, но он объявляет массивы как нулевые. Вы знаете, в чем заключается ошибка в моем разделе массива?

Я не уверен, что мне нужно сделать, чтобы исправить нулевые проблемы в этом случае. Я просматривал код несколько раз и не мог его понять.

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 Ответ

5 голосов
/ 04 августа 2020

В каждом l oop вы увеличиваете индекс до доступа к текущему элементу. Например, когда counting_line1 равно 0 в первом l oop, вы, вероятно, намереваетесь установить reservation_array_line1[0][0] на "Seat", распечатать это значение, а затем увеличить counting_line1.

Однако, поскольку вы увеличиваете перед тем, как получить доступ, вы фактически распечатываете reservation_array_line1[1][0], для которого не было установлено ничего, кроме его значения по умолчанию, null, потому что это то, что следующая итерация вашего l oop должен заботиться о. Фактически, вы заметите исключение ArrayIndexOutOfBoundsException на последней итерации l oop, когда к несуществующему элементу reservation_array_line1[20][0] попытается получить доступ.

Чтобы исправить это, просто поменяйте местами порядок, в котором вы увеличиваете и получаете доступ:

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...