Java 来自不同类的对象的ArrayList-空指针错误 public void populatePrizeArraylist() { ArrayList prizeArrayList=新的ArrayList(); //我们将从中读取的文件的名称 文件名=新文件(“奖品.txt”); 尝试 { //准备使用扫描仪对象读取文件 FileReader inputFile=新的FileReader(文件名); 扫描仪解析器=新扫描仪(inputFile); //读取每一行,直到到达文件末尾 while(parser.hasNextLine()) { //阅读整行内容,其中包含1个奖项的所有详细信息 String readFile=parser.nextLine(); 字符串分隔符=“,”; String[]fileList=readFile.trim().split(分隔符); 奖品newPrize=新奖品(); setPrizeName(文件列表[0]); setPrizeWorth(Integer.parseInt(fileList[1]); setPrizeCost(Integer.parseInt(fileList[2]); this.prizeArrayList.add(newPrize); } } }

Java 来自不同类的对象的ArrayList-空指针错误 public void populatePrizeArraylist() { ArrayList prizeArrayList=新的ArrayList(); //我们将从中读取的文件的名称 文件名=新文件(“奖品.txt”); 尝试 { //准备使用扫描仪对象读取文件 FileReader inputFile=新的FileReader(文件名); 扫描仪解析器=新扫描仪(inputFile); //读取每一行,直到到达文件末尾 while(parser.hasNextLine()) { //阅读整行内容,其中包含1个奖项的所有详细信息 String readFile=parser.nextLine(); 字符串分隔符=“,”; String[]fileList=readFile.trim().split(分隔符); 奖品newPrize=新奖品(); setPrizeName(文件列表[0]); setPrizeWorth(Integer.parseInt(fileList[1]); setPrizeCost(Integer.parseInt(fileList[2]); this.prizeArrayList.add(newPrize); } } },java,arraylist,Java,Arraylist,我做错了什么?我创建了一个新的ArrayList,然后创建了一个新对象,并为该对象的name变量设置了一些值,但是当我尝试将该对象添加到ArrayList时,我得到了一个空点异常错误 public void populatePrizeArraylist() { ArrayList <Prize> prizeArrayList = new ArrayList <Prize>(); // The name of the file which we will r

我做错了什么?我创建了一个新的ArrayList,然后创建了一个新对象,并为该对象的name变量设置了一些值,但是当我尝试将该对象添加到ArrayList时,我得到了一个空点异常错误

public void populatePrizeArraylist()
{
    ArrayList <Prize> prizeArrayList = new ArrayList <Prize>();
    // The name of the file which we will read from   
    File filename = new File("prizes.txt");

    try 
    {   
        // Prepare to read from the file, using a Scanner object
        FileReader inputFile = new FileReader(filename);

        Scanner parser = new Scanner(inputFile);
        // Read each line until end of file is reached
        while (parser.hasNextLine())
        {
            // Read an entire line, which contains all the details for 1 prize
            String readFile = parser.nextLine();
            String delimiter = ","; 
            String[] fileList = readFile.trim().split(delimiter);

            Prize newPrize = new Prize();

            newPrize.setPrizeName(fileList[0]);
            newPrize.setPrizeWorth(Integer.parseInt(fileList[1]));
            newPrize.setPrizeCost(Integer.parseInt(fileList[2]));

            this.prizeArrayList.add(newPrize);

        }
    }
}
错误,因为您需要调用
setGoodName()
newItem
试试这个:

goodsArrayList.setGoodName("Pants");
goodsArrayList.add(newItem);
错误,因为您需要调用
setGoodName()
newItem
试试这个:

goodsArrayList.setGoodName("Pants");
goodsArrayList.add(newItem);

此变量声明在方法范围内

newItem.setGoodName("Pants");
goodsArrayList.add(newItem);
因此,我确信有一个类级变量“prizeArrayList”已经定义,它还没有初始化,您正在尝试添加到它并获取NPE

你必须使用

this.prizeArrayList.add(newPrize);

此变量声明在方法范围内

newItem.setGoodName("Pants");
goodsArrayList.add(newItem);
因此,我确信有一个类级变量“prizeArrayList”已经定义,它还没有初始化,您正在尝试添加到它并获取NPE

你必须使用

this.prizeArrayList.add(newPrize);
如果我读对了你的代码。 您正在void函数中填充数组列表。 数组列表是在该函数内部本地创建的。 如果您没有在某个地方返回该数组列表,那么该数组列表将在函数endas之后删除

传统建议,使用构造函数通过默认构造函数创建一个类,然后通过方法将其属性设置为某个值,这是一个坏习惯。

如果我没有看错代码的话。 您正在void函数中填充数组列表。 数组列表是在该函数内部本地创建的。 如果您没有在某个地方返回该数组列表,那么该数组列表将在函数endas之后删除



传统建议,使用构造函数通过默认构造函数创建一个类,然后通过方法将其属性设置为某个值,这是一个坏习惯。

您确定会遇到运行时异常吗?您的代码将无法编译,因为您试图在
ArrayList
上调用一个不存在的
setGoodName()
方法,而不是对象
newItem
hi@kaykay我放了更多的代码,您能找出错误吗?此代码与您之前发布的代码段完全不同。请考虑清楚你的问题。想象一下,如果有人要求您调试某些代码,您希望从他们那里得到什么信息?您确定得到了运行时异常吗?您的代码将无法编译,因为您试图在
ArrayList
上调用一个不存在的
setGoodName()
方法,而不是对象
newItem
hi@kaykay我放了更多的代码,您能找出错误吗?此代码与您之前发布的代码段完全不同。请考虑清楚你的问题。想象一下,如果有人要求你调试一些代码,你希望从他们那里得到什么信息Hi jake,它编译正常,但我得到一个空指针异常错误Hi jake,它编译正常,但我得到一个空指针异常错误我如何初始化它?看看你的方法,你不想添加到类级变量。只需从将newPrize添加到prizeArrayList的行中删除“this”。好的,但现在我无法从任何其他方法访问它,因为prizeArrayList不是类级变量,它只是在方法范围内创建它,然后消失?然后让我们初始化类级变量。使用
newarraylist()
将空列表分配给类级别变量。您不需要方法作用域
prizeArrayList
,只需从方法中删除该行(第一行)。您的原始代码可以工作。我如何初始化它?查看您的方法,您不想添加到类级别变量。只需从将newPrize添加到prizeArrayList的行中删除“this”。好的,但现在我无法从任何其他方法访问它,因为prizeArrayList不是类级变量,它只是在方法范围内创建它,然后消失?然后让我们初始化类级变量。使用
newarraylist()
将空列表分配给类级别变量。您不需要方法作用域
prizeArrayList
,只需从方法中删除该行(第一行)。您的原始代码将起作用。谢谢@Spidey在这里学到了很多。那么你会推荐什么呢?@Tarinkot使用自定义构造函数,它们允许你在参数中为属性添加值。如果你不熟悉它们,我推荐一个关于java的好教程页面。@Tarinkot关于主要问题,我建议将数组列表返回到你需要使用的任何地方。谢谢@Spidey在这里学到了很多东西。那么你会推荐什么呢?@Tarinkot使用自定义构造函数,它们允许你在参数中为属性添加值。如果您不熟悉它们,我推荐一个关于java的好教程页面