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

如何在Java中构建一个读取xml文件的构造函数?

如何在Java中构建一个读取xml文件的构造函数?

ibeautiful 2019-04-18 18:15:57
我正在用Java创建一个小板游戏,我想在XML文件中实现游戏关卡(即每个级别,关卡,关卡的高度和长度,以及每个单元的定义),然后通过询问用户他想要玩的等级来构建棋盘。我已经在Board类中构建了一个经典的构造函数,没有XML文件和if(因此我在代码中放置了每个级别的描述)。问题是,每次我想添加一个级别,我需要再次编译。谢谢 !编辑:这是我当前Board类的代码,带有构造函数:public class Board {     private int h;     private int l;     private Cell[][] plateau;     Board(int level) {         if (level == 1) {             h=2;             l=2;             plateau = new Cell[h + 2][l + 2];             plateau[0 + 1][0 + 1] = new Cell(true, 1, 1, Couleurs.None, Couleurs.Blue, Couleurs.None, Couleurs.None);             plateau[1 + 1][0 + 1] = new Cell(true, 2, 1, Couleurs.Red, Couleurs.None, Couleurs.None, Couleurs.None);             plateau[0 + 1][1 + 1] = new Cell(true, 1, 2, Couleurs.None, Couleurs.Red, Couleurs.None, Couleurs.None);             plateau[1 + 1][1 + 1] = new Cell(true, 2, 2, Couleurs.Blue, Couleurs.None, Couleurs.None, Couleurs.None);         }我构建的XML文件:<?xml version="1.0" encoding="UTF-8"?><Levels>     <Level id="1">     <h>2</h>     <l>2</l>         <description>         plateau[0 + 1][0 + 1] = new Cell(true, 1, 1, Couleurs.None, Couleurs.Blue, Couleurs.None, Couleurs.None);         plateau[1 + 1][0 + 1] = new Cell(true, 2, 1, Couleurs.Red, Couleurs.None, Couleurs.None, Couleurs.None);         plateau[0 + 1][1 + 1] = new Cell(true, 1, 2, Couleurs.None, Couleurs.Red, Couleurs.None, Couleurs.None);         plateau[1 + 1][1 + 1] = new Cell(true, 2, 2, Couleurs.Blue, Couleurs.None, Couleurs.None, Couleurs.None);                 </description>     </Level></Levels>所以我想要的是Board类读取XML文件来构建板。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

简短回答:不要尝试解析板构造函数中的XML文件。

您似乎已经有了一个有效的构造函数和有效的类来为您设置板。将这些类传递给Board构造函数。让某种工厂为你创建实例。

不要将XML解析逻辑与Board游戏逻辑混合在一起。这是两件完全不同的事情。根据单一责任规则,它应该分开。

如果操作正确,您应该能够在XML-File或任何其他来源的代码中创建具有ad-hoc配置的电路板。换句话说:对于数据来源的董事会而言,这无关紧要。

XML文件看起来应该更像这样:

<Levels>
    <Level id="1">
    <h>2</h>
    <l>2</l>
    <plateau key="value">
      <cells>
        <cell row="0" column="0" color="black">
        </cell>
        <!-- ... -->
      </cells>
    </plateau>

使用XML解析器解析从文件中读取数据。将结果传递给Board构造函数,例如伪代码:

List<Level> levels = parseLevels(...);new Board(levels.get(0));

'parseLevels()'的实现可能很棘手。我建议您使用JAXB来解析文件并创建数据结构。试试这个教程:https: //www.baeldung.com/jaxb


查看完整回答
反对 回复 2019-05-15
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

看一下这个页面,看看它是如何在Java中完成的: Java XML Parsers。Java中内置了大约四种不同的解析器(可能在更新的版本中更多)。

现在关于构造函数:

public Board(String pathToXML) {
   // Add code parsing the XML}

在调用构造函数之前,可以将参数作为参数发送到main方法。

public static void main(String[] args) {
    String pathToXML = args[0];
    Board b = new Board(pathToXML);}

请记住,参数从0开始,而不是1。


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 494 浏览

添加回答

举报

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