我有一个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;
答案 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的可能性。