首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有数组的getMethod

带有数组的getMethod
EN

Stack Overflow用户
提问于 2015-02-18 03:13:32
回答 1查看 55关注 0票数 0

我似乎搞不懂为什么这不管用。plow是我在另一个类文件中创建的构造函数,但我希望能够分配它,以便我以后可以通过为构造函数使用数组来更改犁的数量。

代码语言:javascript
复制
                 static int PLOWS=4
                 public static final String PLOW_DATA = "PlowData.txt";


                 public static void getPlowData(){
                    Plow[] plows = new Plow[PLOWS];
                    Scanner fileIn = null;
                    int a = 0;
                    int plowID;
                    String driver;
                    System.out.println("Reading Files....");
                    try
                    {
                        fileIn = new Scanner(new FileInputStream(PLOW_DATA));
                        System.out.println("File Found!");
                    }
                    catch (FileNotFoundException e)
                    {
                        System.out.println("Error: file '" + PLOW_DATA + "' not found.");
                    }

                    while (fileIn.hasNext())
                    {
                        //System.out.println("Writing...");
                        try{
                            plowID = fileIn.nextInt(); //reading plow ID
                            System.out.print(plowID+"\t");
                            plows[a].setPlowID(plowID); 
                        }
                        catch (java.util.InputMismatchException e){
                            driver = fileIn.nextLine(); //reading Driver
                            System.out.println(driver);
                            plows[a].setDriver(driver);
                        }
                        a++;

                    }
                    fileIn.close();
                    System.out.println("Done!");
                }

当我运行它时,我会得到这个错误

代码语言:javascript
复制
10  Exception in thread "main" java.lang.NullPointerException
at um.csc276.JavaHomework4.HW4_1.getPlowData(HW4_1.java:63)
at um.csc276.JavaHomework4.HW4_1.main(HW4_1.java:149)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 03:19:31

在这方面:

代码语言:javascript
复制
 Plow[] plows = new Plow[PLOWS];

您正在实例一个新的Plow对象数组。但是此时,数组将初始化为PLOWS项,但其中的所有项都将是null。每个项目都需要自己初始化。

所以当你到达这部分时:

代码语言:javascript
复制
 plows[a].setPlowID(plowID); 

plows[a]为null,因此是运行时异常。

一个可能的解决方案,将在while块中,在try之前添加:

代码语言:javascript
复制
if (plows[a] == null) plows[a] = new Plow();

编辑:正如@StenSoft所指出的,NPE的另一个原因是,如果while循环(以及稍后的close()调用)尝试使用FileInputStream;如果文件不存在,您只需捕获异常而不恢复(或中断),然后继续处理:流将为null,您将得到另一个NullPointerException。将while循环移到try catch中,那么放置close()调用的最佳位置是在finally中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28575324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档