为了账号安全,请及时绑定邮箱和手机立即绑定

代码块未触及

代码块未触及

ibeautiful 2021-03-31 13:15:29
我正在用Java构建小型应用程序,小型游戏机制,但没什么大不了的。我有一个旨在从文件中获取数据的类。但是,当我声明要从中读取的两个类时,程序将忽略所有内容并继续。结果,当我尝试访问相应的列表时,它给了我空指针异常。以下获取数据的方法的代码:public void getData(int l, player tmp, level le) {        String[] dataPlayer;        String[] dataLevel;        try {            //FileReader f = new FileReader(this.levelPath.concat(Integer.toString(l)));            File f = new File(this.levelPath.concat(Integer.toString(l)));            BufferedReader buff = new BufferedReader(new FileReader(f));            System.out.println("Reached");            boolean eof = false;            while (!eof) {                String b = buff.readLine();                if (b == null)                    eof = true;                else {                    if (b.contains("player")) {                        dataPlayer = b.split("-");                        for (int i = 0; i < dataPlayer.length; i++) {                            if (i == 0)                                continue;                            items it = new items(dataPlayer[i]);                            tmp.setInventory1(it);                        }                    }else if (b.contains("level")) {                        dataLevel = b.split("-");                        for (int i = 0; i < dataLevel.length; i++) {                            if (i == 0)                                continue;                            items it = new items(dataLevel[i]);                            le.setSpecific(it);                        }                    }                }            }        }catch (IOException i) {            i.getMessage();        }    }
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

如果要保留循环代码,则可以重构代码,使其看起来像这样:


public void getData(int l, player tmp, level le) {

    try (BufferedReader buff = new BufferedReader(new FileReader(new File(this.levelPath + l)))) {

        String b;

        while ((b = buff.readLine()) != null) {

            if (b.contains("player")) {

                String[] dataPlayer = b.split("-");

                items it = new items(dataPlayer[1]); //because you know that you will have an array with only 2 elements

                tmp.setInventory1(it);

            }else if (b.contains("level")) {

                String[] dataLevel = b.split("-");

                items it = new items(dataLevel[1]); //because you know that you will have an array with only 2 elements

                le.setSpecific(it);

            }

        }

    }catch (IOException e) {

        e.printStackTrace();

    }

}

它比您拥有的要好一些,更易于调试和阅读。我建议您阅读有关尝试使用资源的信息。


根据经验,每次打开流时,都必须将其关闭。如果您自己不打开它,则不要关闭它。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信