Java 为什么我的显示方法要打印两次输出?

Java 为什么我的显示方法要打印两次输出?,java,output,Java,Output,当我调用displayStatus方法时,输出将打印相同的输出两次。为什么呢?当我只调用一个display方法时,它会同时打印两个方法的输出。我试图让它在调用该方法时打印一次输出,但我不明白它为什么要打印两次 为什么我的显示方法要打印两次输出 这是因为在方法中有两组if语句 import java.util.*; public class Lights { boolean L1; boolean L2; public Lights(boolean x) {

当我调用displayStatus方法时,输出将打印相同的输出两次。为什么呢?当我只调用一个display方法时,它会同时打印两个方法的输出。我试图让它在调用该方法时打印一次输出,但我不明白它为什么要打印两次

为什么我的显示方法要打印两次输出

这是因为在方法中有两组if语句

import java.util.*;

public class Lights {
    boolean L1;
    boolean L2;

    public Lights(boolean x) {
        L1 = x;
        L2 = x;
    }

    public void displayStatus() {
        if (L1 == true) {
            System.out.println("L1 is on");
        } else if (L1 == false) {
            System.out.println("L1 is off");
        }
        if (L2 == false) {
            System.out.println("L2 is on ");
        } else if (L2 == true) {
            System.out.println("L2 is off");
        }
    }
}

class Simulator {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.println("Do want lamps on or off");
        String s = console.nextLine();
        boolean x = true;

        if (s.equals("on")) {
            x = true;
        }

        if (s.equals("off")) {
            x = false;
        }

        Lights L1 = new Lights(x);
        Lights L2 = new Lights(x);
        L1.displayStatus();
        L2.displayStatus();
    }
}
此外,我在灯光对象(
L1
L2
)中看到了2个布尔标志,并且在代码中声明了2个灯光对象。您可能希望灯光类仅对应于一个灯光对象

灯光类只需要一个用于灯光状态的布尔值:

//print once
if(...){

}
else if(...){

}
//print again
if(...){

}
else if(...){

您创建了两个灯光对象:L1L2,但灯光对象始终具有两个布尔属性(L1L2以及…非常容易误导)->4个布尔值:L1.L1、L1.L2、L2.L2

因此,当您显示L1的状态时,您将根据L1.L1L1.L2得到2个输出。。。
L2灯光对象相同。因此,您可以得到4行作为输出。

当我查看类设计时,我认为您对类的工作方式有些困惑。每个灯光实例都有两个设置为相同值的布尔字段。因此,
灯光L1
灯光L2
中都有布尔值L1和L2,并将打印关于其中L1和L2的消息。没有神奇的自动检测,因为您命名了变量L1,它应该只打印包含L1的消息。简而言之:您可能应该回到关于类和实例以及它们如何工作的基本教程。您的if语句也可以这样简化:
if(L1){System.out.println(“L1打开”);}else{System.out.println(“L1关闭”);}
。L1已经是布尔值,因此执行
L1==true
是多余的。如果评估相反的场景也是多余的,则该程序需要两个灯光objects@SamuraiBale您可以有任意多个灯光对象实例,但在对象本身中,不需要有超过1个布尔值来表示灯光是打开还是关闭,正如此答案所示。
class Light{
    private boolean lightIsOn;

    public Light(boolean status){
        this.lightIsOn = status;
    }

    public void displayStatus(){
        if(lightIsOn)
            System.out.println("Light is On");
        else
            System.out.println("Light is Off");
    }   
}