在Java中操作2d数组

时间:2015-04-15 18:50:41

标签: java arrays multidimensional-array

因此,对于家庭作业,我必须编写一个程序,打印出一张默认情况下用-表示的航空公司座位表(表示他们是"打开&#34 ;并有资格预订)。随后,它应该提示用户他们想要购买的座位&将数组中特定点的值更改为X

这就是我的代码现在的样子 - 它打印出来的表格很好,但是当我尝试更改位置时它会给我一个错误:

import java.util.*;

public class AirlineSeeting {

    public static void main(String[]args) {
        int row = 0;
        int colum = 0;
        System.out.println("Enter n:");
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        String[][] SeetingChart = new String[n][4];

        for (int i = 1; i <= 4; i++) {
            System.out.printf("\t%d\t", i);
        }

        System.out.println("");

        for (int j = 1; j <= n; j++) {
            System.out.printf("%d", j);
            for (int k = 1; k <= 4; k++) {
                System.out.print("\t-\t");
            }
            System.out.println("");
        } 
        for( int i = 0 ; i < SeetingChart.length; i++){
            System.out.println("What row would you like to sit in");
            row = scanner.nextInt();
            System.out.println("What colum would you like to sit in");
            colum = scanner.nextInt();
            if (SeetingChart[row][colum].equals("X")){
                System.out.println("Please pick a seat that is avalable");
            }
            else if (SeetingChart[row][colum].equals("-")){
                SeetingChart[row][colum] = "X";
            }
            for (int j = 1; j <= 4; j++) {
                System.out.printf("\t%d", j);
            }

            System.out.println("");

            for (int j = 1; j <= n; j++) {
                System.out.printf("%d", j);
                for (int k = 1; k <= 4; k++) {
                    System.out.print("\t-");
                }
                System.out.println("");
            } 
        }
    } 
}

这是我在执行上述代码时得到的输出:

Enter n:
9
    1       2       3       4   
1   -       -       -       -   
2   -       -       -       -   
3   -       -       -       -   
4   -       -       -       -   
5   -       -       -       -   
6   -       -       -       -   
7   -       -       -       -   
8   -       -       -       -   
9   -       -       -       -   
What row would you like to sit in
2
What colum would you like to sit in
2
Exception in thread "main" java.lang.NullPointerException
    at AirlineSeeting.main(AirlineSeeting.java:30)

对此有任何帮助将不胜感激! 谢谢!

3 个答案:

答案 0 :(得分:1)

SeetingChart是一个对象数组,即String。因此,所有条目都使用null进行初始化。您的程序在

崩溃
            if (SeetingChart[row][colum].equals("X")){

因为您尝试在equals上调用方法(即null)。这就是为什么你应该改变声明的原因:

            if ("X".equals(SeetingChart[row][colum])){

这会阻止NullPointerException

答案 1 :(得分:0)

欢迎使用StackOverflow!

你的问题是你永远不会初始化数组的内容,所以当你尝试在元素上调用equals()时会抛出NPE,因为如果在Java中操作'null'会发生这种情况。当您检查座位是否被占用时,请添加如下所示的空检查:

if (SeetingChart[row][colum] != null && SeetingChart[row][colum].equals("X")){

答案 2 :(得分:0)

问题是你永远不会初始化你的数组,使其中包含“ - ”,因此数组SeetingChart的每个元素都被初始化为null。

if (SeetingChart[row][colum].equals("X")){

您正尝试在空引用上调用.equals,这是不可能的。

我建议将SeetingChart的所有元素初始化为“ - ”。

您可以使用Arrays.fill(SeetingChart[i], "-");填充数组taken from here

示例:

for(int i = 0; i < test.length; i++)
{
    Arrays.fill(SeetingChart[i], "-");
}