返回一个布尔值并在其他方法和对象中使用它

时间:2011-12-21 21:34:54

标签: java boolean return

我要在两个不同的类中创建一个显示军事和正常时间的时钟,并将时间声明为对象。这样做但现在我需要将clock类扩展为 其中包含AMPMclock方法的setAMPM(boolean yes)。如果setAMPM(true)它将显示军事时间,如果它是假,它将显示正常时间。我创建了setAMPM方法

class AMPMclock extends clock
{
    boolean setAMPM(boolean yes)
    { 
        return yes;
    }  
}

class clock
{
    private int hours;
    private int minutes;
    private int seconds;
private boolean yes;

    setMin....

    setHour...

    setSec....

    tick() ///moves the clock 1sec


    public String toString()
    {

        if(yes) return String.format("%d:%02d:%02d %s", (hours == 12 || hours == 0)?12 : hours%12, minutes, seconds, (hours < 12)? "AM" : "PM");
        else return String.format("%02d:%02d:%02d",hours,minutes,seconds);
    //else 
    }

}


MAIN

AMPMclock clockObject = new AMPMclock();

clockObject.setHour(16);
clockObject.setMin(28);
clockObject.setSec(58);



    System.out.println(clockObject.toString());
    clockObject.tick();
    clockObject.setAMPM(false);
    System.out.println(clockObject.toString());

    clockObject.tick();
    clockObject.setAMPM(true);
    System.out.println(clockObject.toString());
    clockObject.tick();
    System.out.println(clockObject.toString());

但是,我使用clockObject.setAMPM(true)clockObject.setAMPM(false) yes布尔值不会改变,所以我可以在另一种方法中使用它。它始终保持不变......有什么帮助吗? TNX

4 个答案:

答案 0 :(得分:3)

setter的想法是封装私有实例变量。您只需返回参数而不修改类的内部状态,这就是您的代码中没有“粘附”的原因。

class Clock {

     private boolean useAMPM;

     public void setAMPM(boolean useAMPM) {
         this.useAMPM = useAMPM;
     }

     public boolean isAMPM() {
         return this.useAMPM;
     }
}

答案 1 :(得分:2)

如果您将设置保存在例如ampm实例变量中,则需要以下内容:

boolean ampm = true;

boolean setAMPM(boolean yes)
{
    ampm = yes;
    return yes;
}  

答案 2 :(得分:0)

您可能需要遵循java bean约定吗?

这是你的目标吗?

public class AMPMClock {

  private boolean isAMPM;

  public void setAMPM(boolean ampmFlag){
    this.isAMPM = ampmFlag;
  }
  public boolean isAMPM(){
   return this.isAMPM;
  }

}

答案 3 :(得分:0)

您可能需要将其存储在成员变量中......

    private boolean useAMPM = false;
    public boolean setAMPM (final boolean wantAMPM) {
          useAMPM = wantAMPM;
          return useAMPM;
    }
    public void draw () {
            … 
          if (useAMPM) { /* … */ } else { /* … */ }
    }

方法的lambda列表中的变量(在定义方法时指定的变量,如wantAMPM / yes)在调用函数时分配,并在函数返回时销毁。 (由于各种原因,将它们全部声明为final是一个好习惯。)事实上,您也可以在(几乎)任何一对{{1}内创建自动变量在Java程序中,当你到达{ braces }块的末尾时,它同样会被销毁。

成员变量(属性)在找到它们的对象实例的生命周期内保留。所以当,例如您说},然后会创建Clock clockInstance = new Clock ();,并继续存在,直到clock.useAMPM被销毁。