首页 > 解决方案 > Java 数组声明为 null

问题描述

我在使用数组的代码时遇到问题。我为数组设置了一个while循环,但它将数组声明为null。你知道我的数组部分的错误是什么吗?

我不确定在这种情况下我需要做什么来解决 null 问题。我已经通过代码多次,无法弄清楚。

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
}

}**

标签: java

解决方案


在每个循环中,您在访问当前元素之前递增索引。例如,当counting_line1在第一个循环中为 0 时,您可能打算设置reservation_array_line1[0][0]"Seat",打印出该值,然后递增counting_line1

但是,因为您在访问之前递增,实际上您打印出reservation_array_line1[1][0]除了默认值之外没有设置任何内容null,因为这是您的循环的一次迭代应该处理的内容。实际上,当reservation_array_line1[20][0]尝试访问不存在的元素 时,您会在循环的最后一次迭代中注意到 ArrayIndexOutOfBoundsException。

要修复它,只需交换递增和访问的顺序:

    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;
    }

推荐阅读