for循环中出现NullPointerException错误

时间:2013-05-09 19:27:36

标签: java android arrays exception

我有这个方法,每当我尝试在我的foo数组中放置值时,我得到NullPointerException。我试图解决它,但我不知道为什么它告诉我NullPointerException。 感谢您的帮助:)

mine = " 0 2 3 ";

    try {                       
        for(int i = 0; i < mine.length(); i++) {
            String k = "" + mine.charAt(i);
            if(k.equals(" ") == false)
                j++;    
        }
    } catch(Exception r) {
        Toast.makeText(this, "Bad", Toast.LENGTH_SHORT).show();
    }

    try {
        int[] foo = new int[j];

        for(int i = 0; i < mine.length(); i++) {    
            String k = "" + mine.charAt(i);
            if(k.equals(" ") == false) {
                String a = "" + mine.charAt(i); 
                myNum = Integer.parseInt(a);
                foo[i-1] = myNum;
            }
        }
    } catch(Exception df) {
        Toast.makeText(this, "Bad", Toast.LENGTH_SHORT).show();
    }

1 个答案:

答案 0 :(得分:0)

  1. 什么是mine?如果为null,则会出现空指针异常。
  2. 使用有意义的可变名称。 j没有意义。
  3. 学习如何比较角色。
  4. 我建议使用NM样式支撑,但这是个人偏好。
  5. 学习如何使用java集合。
  6. 了解如何通过索引访问数组。我从0开始,0 - 1超出范围。
  7. 如果您要使用不同步的数组(foo值与我的值不在同一个索引处),请使用2个索引变量(可能是mineIndex和fooIndex)。
  8. 按名称捕获异常。不要只捕捉异常。如果你坚持捕捉异常,可以考虑添加这个评论:“//我在编程时很糟糕”你抓住了块。
  9. 选项1

    List valueList = new LinkedList();
    try
    {
      for (int index = 0, index < mine.length(); ++ index)
      {
        final char current = mine.charAt(index);
    
        if (current != ' ')
        {
          valueList.add(Integer.valueOf(current));
        }
      }
    }
    catch (NullPointerException exception)
    {
      ... do something.
    }
    catch (NumberFormatExxception exception)
    {
      ... do something.
    }
    
    

    选项2 - 这很糟糕

    int valueCount = 0;
    try
    {
      for (int index = 0, index < mine.length(); ++ index)
      {
        if (mine.getAt(index) != ' ')
        {
          ++valueCount;
        }
      }
    }
    catch (NullPointerException exception)
    {
      ... do something.
    }
    
    if (valueCount > 0)
    {
      try
      {
        int[] foo = new int[valueCount];
        int valueIndex = 0;
    
        for (int index = 0, index < mine.length(); ++ index)
        {
          final char current = mine.charAt(index);
    
          if (current != ' ')
          {
            foo[valueIndex++] = Integer.valueOf(current));
          }
        }
      }
      catch (NullPointerException exception)
      {
        ... do something.
      }
      catch (NumberFormatExxception exception)
      {
        ... do something.
      }
    }