代码之家  ›  专栏  ›  技术社区  ›  Bob D

toString和布尔值[重复]

  •  -2
  • Bob D  · 技术社区  · 8 年前

    我正在为一个灯泡制作一个类,我必须让它处于开/关状态,无论它是否烧坏,以及它的颜色。无论出于什么原因,我得到了正确的东西来切换,但我的toString打印了错误的答案,我无法理解为什么。我不习惯使用布尔函数,所以我的代码可能不支持我的逻辑。有人能帮忙吗?

    下面是代码:

    public class Light
    {
     // Variables that will be initialized in the Light constructors.
    
     private boolean on;
     private boolean burntOut;
     private String color = "";
    
     // Default constructor that sets the bulb to on, not burnt out, and "white".
    
     public Light()
     {
      on= true;
      burntOut = false;
      color = "white";
     }
    
     // This constructor sets the variable "on" to the parameter o. The burntOut
     // variable is set to the parameter b. If burntOut
     // is true, on is set to false, no matter what value is stored in o.
     // The color variable is set to the parameter c only if c is "red", "green"
     // or "blue". The constructor ignores the case of the value in c. If c holds
     // any value other than "red", "green" or "blue", the constructor sets
     // color to "white".
    
     public Light(boolean o, boolean b, String c)
     {
    on = o;
    burntOut=b;
      if(burntOut=true){
        on = false;
      }
      else{
        on= o;
      }
      if(c.equalsIgnoreCase("red")){
        color = "red"; 
      }
      if(c.equalsIgnoreCase("blue")){
        color = "blue";
      }
      if (c.equalsIgnoreCase("green")){
        color="green";
      }
      else {
        color = "white";
      }
    
     }
    
     // The toString method returns a String with the Light in the format:
     // off red    burnt out
     // on green    not burnt out
     //
     // Notice there is one space between "off"/"on" and the value for color,
     // and a tab before the "burnt out" or "not burnt out".
    
     public String toString()
     {
      String x ="";
           if(on = true){
             x+="on" + " ";
           }
           if(on = false){
             x+= "off" + " ";
           }
    
           x+= color;
    
           if (burntOut = false){
             x+="\t" + "not burnt out";
           }
           if(burntOut = true){
             x+= "\t" + "burnt out";
           }
    
    
      return x;
     }
    

    下面是项目允许我运行的测试,以显示我的结果:

    > run Light
    

    1.测试灯() *PASS:on设置正确(true) 通过:burntOut设置正确(假) 通过:颜色设置正确(白色) * 失败:toString无法按预期工作(白色烧坏)

    1. 测试灯(布尔b、布尔o、字符串c) *PASS:on设置正确(假) 通过:burntOut设置正确(真) 通过:颜色设置正确(绿色) * 失败:toString无法按预期工作(绿色烧坏)
    1 回复  |  直到 8 年前
        1
  •  0
  •   David    8 年前

    这:

    if(on = true){
    

    你不是 比较 ,你是 分配 值。要进行比较,请使用 == :

    if(on == true){
    

    或者,更简单:

    if(on){
    

    (注意:您的代码中有几个地方存在此错误。这只说明了其中一个。请相应地修复其他地方。)