在java中的字符串上使用.equals抛出NullPointer异常?

时间:2017-02-05 02:56:55

标签: java arrays multidimensional-array

我有一个2d数组"#"和"。"我正在进入一个方法,然后我试图遍历数组并找到多少"#"在里面。使用.equals时,我一直收到NULLPOINTER异常。该方法应该返回"#"在数组中。我尝试迭代2d数组,然后将2d转换为单维数组,仍然得到EXCEPTION我不知道我做错了什么,任何帮助将不胜感激。 我的代码是:

public static int countSeats(String [] [] 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 个答案:

答案 0 :(得分:2)

由于你的循环条件,你得到一个例外:

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

请注意您使用的是<=而不是<。你循环遍历整个audit数组,然后再多走一个,导致NullPointerException。

答案 1 :(得分:0)

你声明String []审计这一事实使得解决方案变得更加复杂,因为你可能会尝试将所有2-D一维认为它会为你简化问题,但它不会。留在2-D内,然后进行搜索

   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; 

答案 2 :(得分:0)

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