为什么我的显示方法会输出两次输出?

时间:2017-10-06 14:28:23

标签: java output

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();
    }
}

当我调用displayStatus方法时,输出会输出两次相同的输出。这是为什么?当我只调用一种显示方法时,它会打印输出两次。当我打电话给方法时,我试图让它打印输出一次,但我无法理解为什么打印它两次。

2 个答案:

答案 0 :(得分:1)

  

为什么我的显示方法会输出两次输出?

这是因为你的方法中有两组if语句。

//print once
if(...){

}
else if(...){

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

}
else if(...){

此外,我在Light对象(L1L2)中看到2个布尔标志,并且您在代码中稍后声明了2个Light对象。您可能希望Light类只对应一个灯光对象。

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

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");
    }   
}

答案 1 :(得分:0)

您创建2个Light对象: L1 L2 ,但您的Light对象始终有2个布尔属性( L1 L2 以及......非常误导) - > 4个布尔值: L1.L1,L1.L2,L2.L1,L2.L2

因此,当您显示 L1 的状态时,您将获得2输出,基于 L1.L1 L1.L2 ... 与 L2 Light对象相同的事情。所以你得到4行作为输出。