有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用引发的数组空指针异常。java中字符串上的等于?

我有一个由“#”和“.”组成的二维数组我传入一个方法,然后尝试遍历数组并找出其中有多少“#”。在使用时,我不断收到NULLPOINTER异常。等于。该方法应返回数组中“#”的数量。我尝试迭代二维数组,然后将二维数组转换为一维数组,但仍然出现异常我不确定我做错了什么,如果有任何帮助,将不胜感激。 我的代码是:

公共静态整数countSeats(字符串[][]aud){

   int openSeats = 0;

   String [] audit;
   audit = new String[120];

   int k = 0;
   for(int i= 0; i < aud.length; i++)
       for(int j = 0; j < aud[i].length; j++)
           audit[k++] = aud[i][j];

    for(int i= 0; i <= audit.length; i++){   
       openSeats = audit[i].equals("#")? +1:+0;
    }
return openSeats;

共 (3) 个答案

  1. # 1 楼答案

    正如其他人所指出的,您通过使用i <= audit.length;而不是i < audit.length;来额外运行for循环一次。此外,作为一种良好的实践,始终将字符串文本保持在方法调用的左侧。例如,代替aud[i][j].equals("#"),做"#".equals(aud[i][j])以避免任何NPE的可能性

  2. # 2 楼答案

    由于循环条件,您将获得一个异常:

    for(int i= 0; i <= audit.length; i++){
    

    注意您是如何使用<=而不是<。在整个audit数组中循环,然后比应该的多循环一次,导致NullPointerException

  3. # 3 楼答案

    声明String[]audit这一事实使解决方案更加复杂,因为您可能试图将所有二维内容都放在一维中,以为这样可以简化问题,但事实并非如此。呆在二维空间里,进行搜索

       int openSeats = 0;
       for(int i= 0; i < aud.length; i++)
       {
           for(int j = 0; j < aud[i].length; j++)
           {
               if( aud[i][j].equals("#") )
               {
                   openSeats++;
               }
           }
       }
       return openSeats;