【问题标题】:what are atoms variable and what are usage of it?什么是原子变量,它的用途是什么?
【发布时间】:2012-08-01 11:00:46
【问题描述】:
public List<Minterm> completeMinterm(Minterm minterm, String variables){
  List<Minterm> minterms=new ArrayList<Minterm>();

    Minterm m1=new Minterm();
    Minterm m2=new Minterm();
    for (int k = 0; k < minterms.size(); k++) {
        for (int i = 0; i < variables.length(); i++) {
       ..
        }
            m1= minterms.get(k);
            m1.addAtom(new Atom(variables.charAt(i),false));
            m2 = minterms.get(k);
            m2.addAtom(new Atom(variables.charAt(i),true));

        ..
    }
    }

我用eclipse调试器找错了,不明白,为什么m2上的atom也同时加到m1上,这行运行的时候:

m2.addAtom(new Atom(variables.charAt(i),true));

知道为什么吗?

【问题讨论】:

  • 因为m1m2都指向对象minterms.get(k)
  • 取决于你想要达到的目标...你的目标是什么?
  • 我想将 minterms.get(k) 分配给 m1 和 m2 并相互独立地处理 m1 和 m2
  • 这种情况下可以使用深拷贝。

标签: java


【解决方案1】:

之后

m1= minterms.get(k);
m1.addAtom(new Atom(variables.charAt(i),false));
m2 = minterms.get(k);
m2.addAtom(new Atom(variables.charAt(i),true));

m1 和 m2 指向同一个对象(从minterms.get(k); 返回)。例如,您可以尝试比较 m1 和 m2 哈希码或指针 (m1==m2)。

【讨论】:

  • 如何将 minterms.get(k) 分配给 m1 和 m2,以便我可以独立于 m2 或 minterms.get(k) 处理 m1?
  • 我已经在你的问题中添加了评论,说你可以使用深拷贝算法来达到所需的行为。
  • @AhmedSalah 有关深拷贝的更多信息,请访问:stackoverflow.com/questions/5001026/java-deep-copy-library
  • 难道没有一种优雅的方法可以解决这个问题,例如 throw temp 变量?
  • @AhmedSalah 您不能只使用临时变量,因为更改临时变量也会更改原始变量。
猜你喜欢
  • 2010-09-27
  • 2011-12-17
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多