当前位置: 首页 > 面试题库 >

尝试将新的Class实例添加到ArrayList时,while循环中出现NullPointerException

仉明知
2023-03-14
问题内容

我在Google上搜索的次数越多,我就会越来越困惑。

我从CSV导入了一个长度未知的名称列表以及其他一些详细信息,然后我需要将其转换为Person对象并将其存储在名为people的列表中,该列表是该类Club的实例变量,它的列表成员基本上。

这是非常复杂的事情的非常简化的版本,我需要在while中循环遍历文件,为每行创建对象,然后将其添加到列表集合中。

但是,当我运行代码时,我一直收到nullPointerException错误,但我很困惑如何避免它。我猜想我在创建新对象时需要在每个循环上更改变量p,但是我认为不可能动态更改变量吗?

想不出每次如何使用有效的非null引用将对象提交到集合。非常感谢您的帮助。我试图在下面的代码中删除所有不必要的内容。

谢谢

   //class arraylist instance variable of class "Club"
   private ArrayList<Person> people;

   //class constructor for Club
   public Club()
   {List<Person> people = new ArrayList<>();}

   public void readInClubMembers()
   {
      //some variables concerning the file input
      String currentLine;
      String name;
      String ageGroup;
      while (bufferedScanner.hasNextLine())
      {
         //some lines bringing in the scanner input from the file
         name = lineScanner.next();
         ageGroup = "young";
         Person p = new Person(); // i guess things are going wrong around here
         people.add(p);
         p.setName(name);
         p.setAgeGroup(ageGroup);
      }
   }

问题答案:

删除构造函数内部的List<Person>before people = …,否则,您将在构造函数内部声明一个新的局部变量people,使该
字段 成为阴影people(然后不再使用)。这使类字段未初始化(null),然后导致NPE。

相反,您想要初始化字段people

public Club() {
    // you can also use "this.people = …" to be explicit
    people = new ArrayList<>();
}

要显示差异:

class Example {
    private int myNumber;

    public Example() {
        myNumber = 42; // sets the field of the class
        int myNumber = 1337; // declares a new local variable shadowing the class field
        myNumber = -13; // accesses the object in the closest scope which is the local variable
        this.myNumber = 0; // explicitly accesses the class field
    }
}


 类似资料:
  • 问题内容: 如标题所示,我正在尝试使用for循环将元素添加到xml文档中。我有一个字符串叫,我想遍历,并为每个名称创建一个元素与属性,并与孩子具有的属性,,,和。 不幸的是,如果您在下面的代码中向下滚动到该方法,当我尝试调用时,会出现以下错误: 我看了几个关于stackoverflow的具有相同错误的问题,但是它们似乎都是在与我的情况完全不同的情况下发生的。我最好的猜测是,该错误与以下事实有关:我

  • 问题内容: 我正在尝试通过数组列表使用foreach循环,但是当我使用它时,它会给我带来错误,但是当我使用正常的for循环时,它可以正常工作,这可能是什么问题? 代码在这里: 这是无效的循环,这是有效的循环: 使用foreach循环时出现的错误是: 问题答案: 终使用Immutable集合类并构建新的集合类,而不要尝试修改单个共享类,但我想使其更加明确。 Guava很好地支持这一点,用于传递数据。

  • 我正在尝试在单个链表的末尾插入一个新节点。但是我在编译后不断得到空点例外。 下面是节点类。 这里是单个LL类 addFirst()方法有效。当我试图通过addLast()创建一个LL时,出现了NullPointerException。我想< code > if(size = = 0){ head = new node;一定有什么问题;},但是我想不通。

  • 问题内容: 请单击下面的链接以查看我单击 ****1 的链接 “ BEAUTY” 。我正在使用此代码单击“ Beauty”链接 成功单击链接后,出现以下异常,有人可以告诉我为什么得到它吗? 问题答案: 试试这个:

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 我有一个简单的Hello World示例,它将Map传递给Camel,并通过Log4J将值显示到控制台。我想通过将Jackson库添加到我的Camel应用程序Context.xml来扩展这个示例,以JSON格式呈现这个映射 首先,我尝试将以下XML标记添加到我的applicationContext.xml中(如http://camel.apache.org/json.html大学“在Spring