toString 和布尔值

toString and booleans

我正在制作一个 class 的灯泡,我必须 on/off 说明它是否烧坏,以及它的颜色。无论出于何种原因,我得到了正确的东西来切换,但是我的 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 设置正确(false) 通过:burntOut 设置正确(真) 通过:颜色设置正确(绿色) * 失败:toString 没有按预期工作(绿色烧坏)

这个:

if(on = true){

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

if(on == true){

或者,更简单:

if(on){

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