【问题标题】:Why is this returned array not working?为什么这个返回的数组不起作用?
【发布时间】:2015-03-18 00:52:04
【问题描述】:

在这段代码中,我试图将一个二维字符数组传递给 cArray 并返回一个一维元素数组,该数组显示二维数组每一行的字符串。

例子:

输入数组(二维):

'a' 'b' 'c' 'd'

'e' 'f' 'g' 'h'

'i' 'j' 'k' 'l'

返回数组(一维):

abcd

哎呀

jkl

这是我的代码:

主要:

public class hw2p1
{   
   public static void main (String [] args) 
   {

  // declare and initialize array of chars
  char[][] array = { {'a', 'b', 'c', 'd'},
                     {'e', 'f', 'g', 'h'},
                     {'i', 'j', 'k', 'l'} };

  cArray array1 = new cArray(array); 

  String[] array2 = array1.getArray();

  for (int i=0; i<array2.length; i++) 
    System.out.println(i+" "+array2[i]);


  }
}

cArray:

public class cArray
{   

   private String[] newArray;

   public cArray ( char[][] array2 )
   {  
      String[] newArray = new String[array2.length];

      for (int i=0; i < array2.length; i++)
         newArray[i] = String.valueOf(array2[i]);

      for (int l=0; l < array2.length; l++)
         System.out.println(newArray[l]);



   }
   public String[] getArray()
   {
      return newArray;
   }
}

当我尝试运行此程序时出现此错误:

线程“main”中的异常 java.lang.NullPointerException at hw2p1.main(hw2p1.java:16)

抱歉,如果这是一个明显的错误。我对编程很陌生。感谢您的帮助!

【问题讨论】:

    标签: java arrays return


    【解决方案1】:

    这就是问题所在:

    String[] newArray = new String[array2.length];
    

    这是在构造函数中声明一个 local 变量 - 所以你根本没有为 field 赋值。你只想:

    newArray = new String[array2.length];
    

    话虽如此,但您根本不清楚为什么需要为此创建一个实例 - 我很想只使用一个带有以下签名的方法:

    static String[] combineArrays(char[][] arrays)
    

    那么你可以只使用一个局部变量,根本不用担心任何字段。这也可能与您的 main 方法属于同一类。

    【讨论】:

    • 我喜欢你的解释和建议不要让cArray 成为一个类,而是使用一个函数。只需添加 this.newArray 即可更清楚地表明我们正在使用实例变量。
    • 谢谢!这解决了所有问题,我最终只是按照您的建议将它作为一个方法而不是一个全新的类。
    【解决方案2】:

    您的局部变量 newArray 隐藏了字段 newArray。更改此行:

    String[] newArray = new String[array2.length];
    

    到这里:

    newArray = new String[array2.length];
    

    【讨论】:

      【解决方案3】:

      在您的cArray 方法中,您实际上是在初始化一个新的局部变量。相反,您应该使用实例变量。

      替换这个:

      String[] newArray = new String[array2.length];
      

      与

      newArray = new String[array2.length];
      

      另外,做null 检查总是很好的:

      if(array2!=null){
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 1970-01-01
        • 2014-08-09
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多