【问题标题】:Two boolean variables in JavaJava中的两个布尔变量
【发布时间】:2011-11-22 05:57:33
【问题描述】:

我想在 java 中编写两个布尔变量,它们相互关联,一个始终为假,一个始终为真。因此,如果您将其中一个设置为 true,则另一个将自动更改为 false。

【问题讨论】:

  • 听起来你需要一个Boolean 和一个逻辑否定......

标签: java variables boolean


【解决方案1】:

不要使用变量 - 使用方法。

使用变量之前

class Before {
    boolean first;
    boolean second;

    boolean setFirst(boolean newValue) {
        first = newValue;
        second = !first;
    } 

    boolean setSecond(boolean newValue) {
        second = newValue;
        first = !second;
    }
}

这样更好:使用单个数据(这是您真正拥有的)并使用逻辑方法。

class After {
    private boolean value;

    boolean first() {
        return value;
    }

    boolean second() {
        return !value;
    }
}

【讨论】:

  • +1 因为你的After 基本上就是我要回答的内容。
  • +1 同意。这也解决了更新异常的潜在问题。虽然根据上下文,他也不一定需要第二种方法-例如,外部代码应该更关心isAlive()!isAlive(),而不是第二种方法isDead()(你的没有什么问题回答,只是指出概念上的清洁度)。
  • @X-Zero 我完全同意。但是,我可以看到 isDead() 方法如果仅出于清洁目的而大量使用,它将是多么有益。此外,将来你可能有理由同时拥有既不死也不活的东西(比如僵尸状态?)。通过将“死亡意味着不活着”的逻辑放在一个位置,您可以巩固变化以备后用。所以是的,我完全同意这完全取决于上下文。
【解决方案2】:

使用 setter 和 getter 为您管理逻辑。

class Foo{

    private boolean _bool1;
    private boolean _bool2;

    public void setBool1(boolean value)
    {
       _bool1 = value;
       _bool2 = !value;
    }

    public void setBool2(boolean value)
    {
       _bool2 = value;
       _bool1 = !value;
    }

    public boolean getBool1() { return _bool1 ;}

    public boolean getBool2() { return _bool2 ;}
}

【讨论】:

  • 我可以在成员变量上使用 -1 表示匈牙利符号吗? :-{
  • @glowcoder 匈牙利表示法类似于 bBool1 和 bBool2。 _memberName 是 C# 类字段的标准。我对java不是很确定。
  • 它似乎只是替换了mbBool1 中的m。但这只是我……我并没有真正为它做 DV :)
【解决方案3】:

使用智能设置器

class Blah {
   private bool1 = true;
   private bool2 = false;


   setBool1(val) {
      this.bool1 = val;
      this.bool2 = !val;
   }

   setBool2(val) {
       this.bool2 = val;
       this.bool1 = !val;
   }

   // more setters/getters

}

请注意,我不确定您是否真的需要这个。如果 2 个布尔值总是相反的,为什么不只用 1 个布尔值并根据它做出决策,而不是根据 2 个布尔值做出决策?

【讨论】:

    【解决方案4】:

    我怀疑你想要boolean 而不是Boolean

    我还怀疑你只需要一个字段,flag1 和一个方法

     public boolean getFlag2() {
          return !flag1;
     }        
    

    【讨论】:

      【解决方案5】:
      public class Opposites {
        protected boolean x = true;
        protected boolean y = false;
        public boolean getX() { return x; }
        public boolean getY() { return y; }
        public boolean toggle() { x=!x; y=!y; }
      }
      
      Opposites o = new Opposites();
      o.getX(); // => true
      o.getY(); // => false
      o.toggle();
      o.getX(); // => false
      o.getY(); // => true
      

      【讨论】:

        【解决方案6】:

        你只能使用一个布尔变量:

        boolean flag = true;
        /*
        flag is true
        !flag is false
        */
        
        ...
        
        flag = false;
        /*
        flag is false
        !flag is true
        */
        

        【讨论】:

          【解决方案7】:

          !myVar 得到相反的结果,而不是有两个变量。如果你愿意,这可以在一个函数中。

          【讨论】:

            猜你喜欢
            • 2021-07-16
            • 1970-01-01
            • 1970-01-01
            • 2014-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-27
            • 1970-01-01
            相关资源
            最近更新 更多