java - 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
}
}**
解决方案
在每个循环中,您在访问当前元素之前递增索引。例如,当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;
}
推荐阅读
- python - 调试在 VS Studio Code Django 中不起作用
- reactjs - Nextjs - 如果在客户端运行,则注入 ContextProvider
- c++ - 出现错误:致命错误:curl/curl.h:没有这样的文件或目录#include
- simulink - 使用 FMI Kit 从 Matlab Simulink 导出 fmu 时如何附加.xls/.csv/.txt 文件?
- reactjs - 如何在 REACT JS 中使用 axios 连接 URL 和字符串,并在单击按钮时从 API 获取数据
- amazon-web-services - 从特定事件中提取 Splunk 中的自定义字段
- system-verilog - 有人可以解释一下 System Verilog 中模块的控制流程吗
- rust - 在 CLion 中使用 nightly rustfmt 和稳定的编译器
- ios - 如何从 Swift 文件管理器播放音频文件?
- java - 为什么授权码流中需要授权码?