【问题标题】:Manipulating 2d arrays in Java在 Java 中操作二维数组
【发布时间】:2015-06-21 21:33:51
【问题描述】:

因此,对于家庭作业,我必须编写一个程序,打印出默认情况下用- 表示的航空公司座位表(以表明它们是“开放的”并且有资格预订)。随后,它应该提示用户他们想要购买的座位并将数组中该特定位置的值更改为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)

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

【问题讨论】:

  • 它会给你什么错误?
  • "[...] 它给了我一个错误。" -> 哪个错误?
  • 我编辑了问题
  • @TravisWittmann 回答您的问题后,请将其标记为已回答。

标签: java arrays multidimensional-array


【解决方案1】:

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

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

因为您尝试在null 上调用方法(即equals)。这就是为什么你应该切换语句的原因:

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

这可以防止NullPointerException

【讨论】:

    【解决方案2】:

    欢迎来到 StackOverflow!

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

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

    【讨论】:

      【解决方案3】:

      问题是你永远不会初始化你的数组以在其中包含“-”,所以数组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], "-");
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 2015-10-03
        相关资源
        最近更新 更多