当前位置: 首页 > 知识库问答 >
问题:

为什么我的数组被覆盖java[复制]

屠锐
2023-03-14

我仍在学习封装。我有一个语法列表,其中每个语法emcapsulated都有一个数组列表规则,以及它们的所有设置程序

public class Grammar {

private enum Type {Left, Right, NULL};
private String Nom;
private static Type type = null;
private static ArrayList<Rule> listRule;

public Grammar(String nom, Type type) {
    this.Nom = nom;
    this.type = type;
    this.listRule = new ArrayList<Rule>();
}
...
}

现在在我的程序中,我注意到数组listRule(其中添加了与语法相关的规则)在每次添加新语法时都会被覆盖。我已经能够识别出错误发生在Grammar=new Grammar(参数[0],null)这一行上会清空listRule中所有其他语法的内容,因此listRule似乎对所有语法都是一样的。我的数组listRule创建不正确还是我的循环?

    try {
        while ((strLine = br.readLine()) != null) {
            String[] parametre = strLine.split(",");
            Grammar G = GrammarList.containsNom(parametre[0]);
            if (G == null) {
                Grammar grammar = new Grammar(parametre[0], null);
                grammarList.add(grammar);
                for (int i = 1; i < parametre.length; i++) {
                    SyntaxCheck check = new SyntaxCheck(parametre[i]);
                    if (check.isValid())
                        grammar.AddRule(check.Rule, check.Sens);
                }
            }
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }

共有1个答案

印瑾瑜
2023-03-14

您的列表规则字段是静态,这意味着每个实例共享同一个对象。

删除静态关键字:

private ArrayList<Rule> listRule; // not static
 类似资料:
  • 问题内容: 这让我发疯!我看了一些关于Stackoverflow的问题,发现ID元素的优先级高于类元素(这很高兴知道,但是我感觉这不是我的问题)。这是我苦苦挣扎的NAVIGATION菜单。(我使用最大宽度顺便说一句) 这是我的资产净值的一般CSS: 现在,当视口小于1140px时,我希望CSS更改菜单,如下所示: 因此,基本上,菜单将以较少的顶部填充向左浮动。 当视口小于800像素时,我希望CSS

  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 问题内容: 我创建了一个将列表作为参数的函数。它会随机排列列表,替换第一个元素,然后返回新列表。 改组对我的问题没有影响。但是,我很惊讶地看到返回的importedList覆盖了原始的firstList。 通过在函数中复制列表,我找到了一种解决方法,但是效率似乎很低。 我的问题是为什么该函数替换firstList?例如,如果是字符串,则不会发生这种情况。 问题答案: 字符串,整数,元组是不可变的p

  • 以下代码是康威在终端中的生活游戏。我想在这里做的是将当前步骤覆盖到下一步。我有一个临时的2D数组在动画()方法。同样在主方法中,我打印了三次动画变化(),这就是我想要改变的。基本上,我想覆盖董事会,而不是打印三次,因为视觉上它相当丑陋,而循环。

  • 我只需要我测试对象获得新的数据,但是在异步函数中重写它之后,它仍然是旧的

  • 问题内容: 对于在要克隆对象的类中重写克隆方法,我感到困惑。 对象类具有 受保护的对象 方法,并且按照受保护的行为,即 当方法受到保护时,只能由类本身,该类的子类或与该类位于同一包中的类访问 。 由于Java中的每个类都从Object扩展而来,因此它应该具有clone方法,但仍然被迫重写clone。为什么需要它? 另外,我在某些地方已经阅读了有关覆盖克隆对象并将其公开的信息。我不知道为什么会这样吗