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方法时,输出会输出两次相同的输出。这是为什么?当我只调用一种显示方法时,它会打印输出两次。当我打电话给方法时,我试图让它打印输出一次,但我无法理解为什么打印它两次。
答案 0 :(得分:1)
为什么我的显示方法会输出两次输出?
这是因为你的方法中有两组if语句。
//print once
if(...){
}
else if(...){
}
//print again
if(...){
}
else if(...){
此外,我在Light对象(L1
和L2
)中看到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行作为输出。